Por supuesto, puedes establecer la variable de entorno dentro del comando, sin embargo tendrás que tener cuidado con las comillas: recuerda que tu shell va a analizar tu línea de comandos local, y luego el shell remoto tendrá que ir a la cadena que recibe.
Si quieres que una variable tenga el mismo valor en el servidor que en el cliente, prueba con la opción SendEnv
:
ssh -o SendEnv=MYVAR server.example.com mycommand
Esto requiere el apoyo del servidor, sin embargo. Con OpenSSH, el nombre de la variable tiene que estar autorizado en /etc/sshd_config
.
Si el servidor sólo permite ciertos nombres de variable específicos, puedes trabajar alrededor de eso; por ejemplo una configuración común permite LC_*
a través, y puedes 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 la información en la variable de entorno TERM
, que siempre se copia (aunque puede haber un límite de longitud). Aún así, tendrás que asegurarte de que el shell remoto no restringe 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'
Así, si se pasa una variable local:
ssh -t server.example.com 'export MYVAR='"'$LOCALVAR'"'; mycommand'
Sin embargo, hay que tener cuidado con los problemas de citación: el valor de la variable se interpolará directamente en el fragmento de shell ejecutado en el lado remoto. El último ejemplo anterior supone que $LOCALVAR
no contiene ninguna comilla simple ('
).