Bien sûr, vous pouvez définir la variable d'environnement à l'intérieur de la commande, mais vous devrez faire attention à la citation: rappelez-vous que votre shell va analyser votre ligne de commande locale et que le shell distant essaiera la chaîne qu'il contient. reçoit.
Si vous voulez qu'une variable obtienne la même valeur sur le serveur que sur le client, essayez l' SendEnv
option:
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é dans /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 permet LC_*
, et vous pouvez faire ce qui suit:
ssh -o SendEnv = LC_MYVAR serveur.exemple.com 'MYVAR = $ LC_MYVAR; non défini LC_MYVAR; exporter MYVAR; ma commande '
Si pair LC_*
n'est pas une option, vous pouvez transmettre des informations dans la TERM
variable d'environnement, qui est toujours copiée (il peut toutefois exister une limite de longueur). Vous devrez toujours vous assurer que le shell distant ne restreint pas la TERM
variable pour désigner un type de terminal connu. Passez l' -t
option à ssh si vous ne démarrez pas un shell interactif distant.
env TERM = "informations supplémentaires: $ TERM" ssh -t server.example.com 'MYVAR = $ {TERM%: *}; TERM = $ {TERM ## *:}; exporter MYVAR; ma commande '
Une autre possibilité consiste à définir la variable directement dans la commande:
ssh -t server.example.com 'export MYVAR = "informations supplémentaires"; ma commande '
Ainsi, en passant une variable locale:
ssh -t server.example.com 'export MYVAR =' "'$ LOCALVAR" "; ma commande '
Cependant, méfiez-vous des problèmes de citation: la valeur de la variable sera interpolée directement dans l'extrait de shell exécuté du côté distant. Le dernier exemple ci-dessus suppose que $LOCALVAR
ne contient pas de guillemets simples ( '
).