Diese Frage hat hier bereits eine Antwort:
Wie kann ich einen Wert an einen ssh-Befehl übergeben, sodass die auf dem Hostcomputer gestartete Umgebung mit einer bestimmten Umgebungsvariablen beginnt, die ich ausgewählt habe?
BEARBEITEN: Das Ziel besteht darin, den aktuellen KDE-Desktop (von dcop kwin KWinInterface currentDesktop) an die neu erstellte Shell weiterzugeben, damit ich einen nfs-Speicherort an meine JEdit- Instanz auf dem ursprünglichen Server zurückgeben kann, der für jeden KDE-Desktop eindeutig ist. (Mit einem Mechanismus wie emacsserver / emacsclient )
Der Grund, warum mehrere ssh-Instanzen gleichzeitig im Flug sind, ist, dass ich beim Einrichten meiner Umgebung eine Reihe verschiedener ssh-Instanzen für verschiedene Computer öffne.
quelle
Die
SendEnv
Option ist dein Typ.~ / .ssh / config: (lokal)
/ etc / ssh / sshd_config: (auf der entfernten Seite)
Was auch immer der Wert von
$MYVAR
local ist, es wird jetzt auch in der Remote-Sitzung verfügbar.Wenn Sie sich mehrmals anmelden, verfügt jede Sitzung über eine eigene Kopie von
$MYVAR
mit möglicherweise unterschiedlichen Werten.~/.ssh/environment
ist für andere Zwecke gedacht. Es fungiert als$ENV
Datei, wenn Nicht-Shell- Befehle remote ausgeführt werden.quelle
ssh myserver -o SendEnv="MYVAR"
, damit Sie es in Skripten dynamisch machen können.Sie können Werte mit einem Befehl übergeben, der dem folgenden ähnelt:
Sie können testen mit:
Unter tcsh scheint Folgendes zu funktionieren:
quelle
&&
). Inexport VAR=value;
diesem Fall funktioniert die Verwendung von bash anstelle von setenv in der dritten Form.ssh user@host "$(<env_to_source.sh) command ..."
. In env to source habe ichexport var=value ;
in separaten Zeilen (erinnere mich an das Semikolon).Es gibt auch einen schrecklichen, schrecklichen Hack.
Wenn Ihr Skript die Variable auf der Remote-Seite verwendet (dh Sie können sie beliebig benennen), können Sie die Gebietsschemavariablen missbrauchen. Jede Variable der Form LC_ * wird wörtlich übergeben, ohne dass eine Konfiguration erforderlich ist.
Zum Beispiel haben wir eine Reihe von Bastionservern bei einem meiner Clients. Ich hasse es, mich damit verbinden zu müssen, nur um mich jedes Mal mit einem anderen Server zu verbinden ... und einem anderen Server. Ich habe ein Skript, das sich genau wie SSH verhält, nur dass es clever ist.
Grundsätzlich wird LC_BOUNCE_HOSTS auf Leerzeichen aufgeteilt und der erste Host abgeschält. Dann springt es durch und führt das gleiche Skript aus. Auf dem Zielknoten ist diese Liste möglicherweise leer, sodass der Befehl ausgeführt wird. Ich habe auch einen Debug-Modus (der bei Netzwerkproblemen großartig ist), der von LC_BOUNCE_DEBUG festgelegt wird. Da ssh all dies magisch für mich weitergibt, muss ich nichts anderes tun, als das Ende der Hostliste zu erkennen (was ich mit einer - Option tue).
Ich fühle mich jedes Mal schmutzig, wenn ich das benutze, aber es funktioniert überall, wo ich es ausprobiert habe.
quelle
ProxyCommand
Option verwenden? Bearbeiten Sie Ihre~/.ssh/config
und fügen Sie einen Block hinzu wieHost *.example.com: ProxyCommand -ssh -W %h:%p bastionhost
und lassen Sie Ihre Verbindungen für Sie tunneln.Auf Bash habe ich getestet mit:
quelle