Natürlich können Sie die Umgebungsvariable innerhalb des Befehls setzen, allerdings müssen Sie dann mit der Zitierweise vorsichtig sein: Denken Sie daran, dass Ihre Shell Ihre lokale Befehlszeile parsen wird und die entfernte Shell dann die empfangene Zeichenkette umsetzt.
Wenn Sie wollen, dass eine Variable auf dem Server denselben Wert erhält wie auf dem Client, versuchen Sie die Option SendEnv
:
ssh -o SendEnv=MYVAR server.example.com mycommand
Dies erfordert allerdings die Unterstützung durch den Server. Bei OpenSSH muss der Variablenname in /etc/sshd_config
autorisiert werden.
Wenn der Server nur bestimmte Variablennamen zulässt, können Sie das umgehen; zum Beispiel erlaubt eine übliche Einrichtung LC_*
durch, und Sie können Folgendes tun:
ssh -o SendEnv=LC\_MYVAR server.example.com 'MYVAR=$LC\_MYVAR; unset LC\_MYVAR; export MYVAR; mycommand'
Wenn selbst LC_*
keine Option ist, können Sie Informationen in der Umgebungsvariablen TERM
übergeben, die immer kopiert wird (es kann jedoch eine Längenbegrenzung geben). Sie müssen trotzdem sicherstellen, dass die entfernte Shell die Variable TERM
nicht darauf beschränkt, einen bekannten Terminaltyp zu bezeichnen. Übergeben Sie die Option -t
an ssh, wenn Sie keine entfernte interaktive Shell starten.
env TERM="extra information:$TERM" ssh -t server.example.com 'MYVAR=${TERM%:\*}; TERM=${TERM##\*:}; export MYVAR; mycommand'
Eine andere Möglichkeit ist, die Variable direkt im Befehl zu definieren:
ssh -t server.example.com 'export MYVAR="extra information"; mycommand'
Wenn Sie also eine lokale Variable übergeben:
ssh -t server.example.com 'export MYVAR='"'$LOCALVAR'"'; mycommand'
Achten Sie jedoch auf Quoting-Probleme: Der Wert der Variablen wird direkt in den auf der entfernten Seite ausgeführten Shell-Schnipsel interpoliert. Das letzte Beispiel oben geht davon aus, dass $LOCALVAR
keine einfachen Anführungszeichen enthält ('
).