Al usar ssh, ¿cómo puedo configurar una variable de entorno en el servidor que cambie de una sesión a otra?

Pregunta:

Cuando hago ssh en un servidor, ¿cómo puedo pasar una variable de entorno del cliente al servidor? Esta variable de entorno cambia entre diferentes invocaciones de ssh, por lo que no quiero sobrescribir $HOME/.ssh2/environment cada vez que hago una llamada ssh. ¿Cómo puedo hacer esto?

Respuesta:

Por supuesto, puede configurar la variable de entorno dentro del comando, sin embargo, tendrá que tener cuidado con las comillas: recuerde que su shell analizará su línea de comando local, y luego el shell remoto probará la cadena. recibe.

Si desea que una variable obtenga el mismo valor en el servidor que tiene en el cliente, pruebe la opción SendEnv :

ssh -o SendEnv=MYVAR server.example.com mycommand

Sin embargo, esto requiere el apoyo del servidor. Con OpenSSH, el nombre de la variable debe estar autorizado en /etc/sshd_config .

Si el servidor solo permite ciertos nombres de variables específicos, puede solucionarlo; por ejemplo, una configuración común permite LC_* través, y puede hacer lo siguiente:

ssh -o SendEnv=LC_MYVAR server.example.com 'MYVAR=$LC_MYVAR; unset LC_MYVAR; export MYVAR; mycommand'

Si incluso LC_* no es una opción, puede pasar información en la variable de entorno TERM , que siempre se copia (sin embargo, puede haber un límite de longitud). Aún tendrá que asegurarse de que el shell remoto no restrinja la variable TERM para designar un tipo de terminal conocido. Pase la opción -t a ssh si no está iniciando un shell interactivo remoto.

env TERM="extra information:$TERM" ssh -t server.example.com 'MYVAR=${TERM%:*}; TERM=${TERM##*:}; export MYVAR; mycommand'

Otra posibilidad es definir la variable directamente en el comando:

ssh -t server.example.com 'export MYVAR="extra information"; mycommand'

Por lo tanto, si pasa una variable local:

ssh -t server.example.com 'export MYVAR='"'$LOCALVAR'"'; mycommand'

Sin embargo, tenga cuidado con los problemas de citas: el valor de la variable se interpolará directamente en el fragmento de shell ejecutado en el lado remoto. El último ejemplo anterior asume que $LOCALVAR no contiene comillas simples ( ' ).

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım