Bien sûr, vous pouvez définir la variable d'environnement à l'intérieur de la commande, mais vous devrez faire attention aux citations : rappelez-vous que votre shell va analyser votre ligne de commande locale, et que le shell distant aura ensuite un essai sur la chaîne qu'il reçoit.
Si vous voulez qu'une variable obtienne la même valeur sur le serveur que sur le client, essayez l'option SendEnv
:
ssh -o SendEnv=MYVAR server.example.com mycommand
Cela nécessite cependant le support du serveur. Avec OpenSSH, le nom de la variable doit être autorisé en /etc/sshd_config
.
Si le serveur n'autorise que certains noms de variables spécifiques, vous pouvez contourner ce problème ; par exemple, une configuration commune autorise LC_*
jusqu'à, et vous pouvez faire ce qui suit :
ssh -o SendEnv=LC\_MYVAR server.example.com 'MYVAR=$LC\_MYVAR; unset LC\_MYVAR; export MYVAR; mycommand'
Si même LC_*
n'est pas une option, vous pouvez passer des informations dans la variable d'environnement TERM
, qui est toujours copiée (il peut cependant y avoir une limite de longueur). Vous devrez quand même vous assurer que le shell distant ne restreint pas la variable TERM
pour désigner un type de terminal connu. Passez l'option -t
à ssh si vous ne démarrez pas un shell interactif distant.
env TERM="extra information:$TERM" ssh -t server.example.com 'MYVAR=${TERM%:\*}; TERM=${TERM##\*:}; export MYVAR; mycommand'
Une autre possibilité est de définir la variable directement dans la commande :
ssh -t server.example.com 'export MYVAR="extra information"; mycommand'
Ainsi, si vous passez une variable locale :
ssh -t server.example.com 'export MYVAR='"'$LOCALVAR'"'; mycommand'
Cependant, attention aux problèmes de citation : la valeur de la variable sera interpolée directement dans le snippet shell exécuté du côté distant. Le dernier exemple ci-dessus suppose que $LOCALVAR
ne contient aucune apostrophe ('
).