Festlegen einer Variablen für einen bestimmten SSH-Host

17

In ssh_configkönnen einige Umgebungsvariablen mithilfe von auf den Host exportiert werden SendEnv.

Gibt es auch eine Möglichkeit, einen bestimmten Wert für diese Variable pro Host zu erzwingen? Ist es zum Beispiel möglich, Variablen $FOOmit Wert barnur dann zu exportieren, wenn eine Verbindung zum Host hergestellt wird example.com?

ℝaphink
quelle

Antworten:

15

Sie können keinen bestimmten Wert für eine Umgebungsvariable in angeben ssh_config, aber Sie können die vorhandene Umgebungsvariable sicherlich nur an bestimmte Hosts senden.

Host example.com
    SendEnv FOO

So vervollständigen Sie die Kette:

FOO=bar ssh [email protected]

Schließlich muss auf dem Remote-Server die Umgebungsvariable aufgeführt AcceptEnvsein sshd_config.

AcceptEnv FOO
Michael Hampton
quelle
WAS ist genau das, was Sie vermeiden möchten?
Michael Hampton
1
Sie müssen einen Alias ​​schreiben, um eine Variable mit einem bestimmten Wert zu senden.
ℝaphink
Entschuldigung, Sie können nicht viel anderes tun ... es sei denn, Sie können den Computer dazu bringen, Ihre Gedanken zu lesen. :)
Michael Hampton
6
Vielen Dank für die Bestätigung meines Verdachts ;-) Was ich gerne gehabt hätte, wäre so etwas wie SetVar FOO='bar'in ssh_config;)
ℝaphink
2
Der wiederkehrende Fall für mich ist, dass alte Systeme nicht unterstützt werden, TERM=tmux-256colordaher möchte ich einen Fallback pro Remote-Host (mit Platzhaltern).
Jed
4

Sie können einen bestimmten Wert SetEnvangeben ~/.ssh/config, indem Sie in Ihrem , z

Host *
  SetEnv FOO=bar

Wie pro man ssh_config:

Geben Sie direkt eine oder mehrere Umgebungsvariablen und deren Inhalt an, die an den Server gesendet werden sollen. Ebenso SendEnvmuss der Server darauf vorbereitet sein, die Umgebungsvariable zu akzeptieren.

Angenommen, Ihr Server hat die folgende Zeile /etc/ssh/sshd_config:

AcceptEnv LANG LC_* FOO

Überprüfen Sie auch: man ssh_configund man sshd_config.

Kenorb
quelle
2
Hinweis für den verwirrten Leser (wie mich, als ich das zum ersten Mal las): Dies ist neu seit OpenSSH 7.8, das im August 2018 veröffentlicht wurde, und es wird eine Weile dauern, bis es dem durchschnittlichen Benutzer durch Betriebssystem-Updates zur Verfügung steht. (Aber sobald es allgemein wird, wird es bei weitem die beste Lösung für das Problem sein)
Irfy
1

Eine andere Idee ist, die Umgebungsvariablen im Befehl ssh festzulegen und eine interaktive Shell auszuführen, z. Ich versuche, eine interaktive Shell mit env-var 'MANWIDTH' aufzurufen:

ssh example.com 'MANWIDTH=120 bash -li'
huch
quelle
0

Sie können die Konfigurationswerte pro Host mithilfe der Datei .ssh / config festlegen. Beispielsweise:

Host example.com
SendEnv FOO

Beachten Sie, dass der Server dies auch unterstützen muss.

user156525
quelle