Zeigt einen Stapel von SSH-Verbindungen im Terminal an

343
Alex

Ich hatte diese Idee lange Zeit und versuchte verschiedene Wege, ohne Erfolg. Habe oft versucht zu googeln und immer nicht ganz das zu finden, was benötigt wird.
Wie macht man:

$ ssh hostA  |--------------------------------| | | | | | | | | | | | | | | | root@hostA $ ssh hostB | |--------------------------------|  |--------------------------------| | | | | | | | | | | | | | root@hostB $ | | root@hostA $ | |--------------------------------| 

Die nächste Lösung, die ich gefunden habe, ist mit der gnu-Bildschirmstatusleiste ssh from hostA to hostB(der Trick ist die Verwendung von $SSH_...Variablen). Es wäre schön, einen visuellen Stapel aller Verbindungen zu haben (nicht nur 2).

0
Das ist nicht praktisch. Stellen Sie sich vor, Sie laufen in beiden Sitzungen "top". Wie soll es angezeigt werden? Die beste Lösung ist [tmux] (http://tmux.sourceforge.net/) oder wenn Sie ein X-Window-System installiert haben und sich nicht um einige Gnome-Abhängigkeiten kümmern, [Terminator] (http: // www. tenshu.net/p/terminator.html). Bobby vor 11 Jahren 0
Sie suchen also nur nach der Aufforderung, den Host, von dem aus Sie sshed haben, sowie den Host, mit dem Sie verbunden sind, wiederzugeben? Könnten Sie die Eingabeaufforderung in einem Bash-Profil nicht einfach mit SSH_Vars aktualisieren? Paul vor 11 Jahren 0
@Bobby, wie das angezeigt wird, ist nicht wichtig - der Schlüssel ist, den Pfad der Verbindungen zu kennen. zB ssh von hostA zu hostB und dann zu hostC könnte als Stack oder als einzelne Zeile dargestellt werden: "hostA -> hostB -> root @ hostC $" Alex vor 11 Jahren 0
@Paul, wie in meinem Fragetext habe ich es geschafft, dass es mit $ SSH_vars funktioniert, aber das funktioniert jetzt und jetzt + vorige Hosts. Was ist, wenn ich eine Kette / einen Tunnel mit 4 Verbindungen sehen möchte? Alex vor 11 Jahren 0
Warten Sie, wollten Sie nur den * Pfad * anzeigen? Wie `root @ hostB_via_hostA`?` Root @ hostC_via_hostB_via_hostA`? In diesem Fall kratzt mein Kommentar. Bobby vor 11 Jahren 0

2 Antworten auf die Frage

1
Nada

Have you tried/looked at screen?

It's not exactly what you want, but you can issue screen -la whenever you like to get the listing you desire.

Hallo Nada, für mich scheinen das Ausführen von "screen" und "screen -la" das gleiche Ergebnis zu haben Alex vor 11 Jahren 0
1
Paul

In können ~/.ssh/environmentSie Umgebungsvariablen festlegen, die Sie an Remote-Hosts weitergeben möchten. Dazu muss die PermitUserEnvironmentEinstellung in aktiviert sein sshd_config.

Was Sie also tun können, ist .bashrcein Umgebungsvariable, das Sie durchgeben möchten, oder welches Skript Sie auch bevorzugen:

echo "HOSTPATH=$HOSTPATH-$USER@$HOSTNAME" >> ~/.ssh/environment 

Für Ihren ersten Sprung HOSTPATHwird es leer sein, ~/.ssh/environmentwürde also enthalten HOSTNAME=-user@host1.

Wenn Sie sich beim zweiten Host anmelden, wird die HOSTNAMEEnv-Variable durchgereicht, um anzuzeigen, wo Sie herkommen. Wenn die bashrc erneut ausgeführt wird, wird die HOSTPATHVariable in .ssh / enviroment geschrieben, wobei der aktuelle Host an den ersten angehängt wird und für den nächsten Hop bereit ist:

HOSTNAME=-user@host1-user@host2 

Jede Hoffnung würde dazu führen, HOSTPATHdass der aktuelle Host angehängt wird und über die ssh-Umgebung zum nächsten Hop weitergeleitet werden kann.

Sie können dies für Ihre eigene Ästhetik anpassen. Wenn Sie einen Host verlassen und zu einem anderen springen, sollte der Host, von dem Sie gekommen sind, automatisch aus dem Pfad gelöscht werden, da er die aktuelle .ssh/environmentEinstellung erneut verwendet. Es könnte sich sogar um Schleifen handeln, ich lasse das dem Leser als Übung überlassen :)