Pokazuje stos połączeń ssh w terminalu

0

Miałem ten pomysł przez długi czas i próbowałem go wdrożyć na kilka sposobów, bez powodzenia. Próbowałem google wiele razy i zawsze nie znalazłem tego, co jest potrzebne.
Jak zrobić:

$ ssh hostA

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

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

Najbliższym rozwiązaniem, jakie wymyśliłem, jest pasek stanu ekranu GNU, który wyświetla ssh from hostA to hostB(sztuczka polega na użyciu $SSH_...zmiennych). Byłoby miło mieć wizualny stos wszystkich połączeń (nie tylko 2).

Alex
źródło
To nie jest praktyczne. Wyobraź sobie, że biegasz w obu sesjach top, jak ma być wyświetlany? Najlepszym rozwiązaniem jest tmux lub jeśli masz X-Window-System i nie masz nic przeciwko Gnome-Dependencies, Terminator .
Bobby
Więc chcesz, aby monit odzwierciedlał hosta, z którego korzystasz, a także ten, z którym jesteś połączony? Czy nie możesz po prostu zaktualizować monitu w profilu bash, używając SSH_ vars?
Paul
@Bobby, tak naprawdę to, jak to jest wyświetlane, nie jest ważne - kluczem jest poznanie ścieżki połączeń. np. ssh z hostA do hostB, a następnie do hostC może być pokazany jako stos lub jako pojedynczy wiersz: „hostA -> hostB -> root @ hostC $”
Alex
@Paul, podobnie jak w tekście pytania, udało mi się sprawić, by działał z vars $ SSH_, ale na razie działa to maksymalnie + poprzednie hosty. Co jeśli chcę zobaczyć łańcuch / tunel z 4 połączeniami?
Alex
Och, czekaj, czy chciałeś tylko wyświetlić ścieżkę ? Jak root@hostB_via_hostA, root@hostC_via_hostB_via_hostA? W takim razie podrap mój komentarz.
Bobby

Odpowiedzi:

1

W ~/.ssh/environmentmożesz ustawić zmienne środowiskowe, które chcesz przekazać do hostów zdalnych. Wymaga to PermitUserEnvironmentwłączenia ustawienia w sshd_config.

Więc co możesz zrobić, to w .bashrcdowolnym skrypcie, który chcesz, ustaw zmienną środowiskową do przejścia:

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

Dla pierwszego skoku HOSTPATHbędzie pusty, więc ~/.ssh/environmentbędzie zawierał HOSTNAME=-user@host1.

Gdy zalogujesz się do drugiego hosta, HOSTNAMEzmienna env var zostanie przekazana, pokazując skąd pochodzisz. Gdy bashrc zostanie ponownie uruchomiony, HOSTPATHzmienna zostanie zapisana do .ssh / enviroment z bieżącym hostem dołączonym do pierwszego, gotowym do następnego przeskoku:

HOSTNAME=-user@host1-user@host2    

Każda nadzieja skutkowałaby HOSTPATHdołączeniem do bieżącego hosta i gotowym do przejścia przez środowisko ssh do następnego przeskoku.

Możesz to dostosować do własnych potrzeb. Jeśli wyjdziesz z hosta i przejdziesz na inny, powinien on automatycznie usunąć hosta, z którego przyszedłeś ze ścieżki, ponieważ ponownie użyje aktualnie ustawionego .ssh/environmentustawienia. Może nawet poradzić sobie z pętlami, zostawię to jako ćwiczenie dla czytelnika :)

Paweł
źródło
1

Próbowałeś / oglądałeś ekran ?

Nie jest to dokładnie to, czego chcesz, ale możesz wydać screen -la, kiedy tylko chcesz uzyskać pożądany wpis.

Nada
źródło
Cześć Nada, jak dla mnie, działa screeni screen -lawydaje się, że daje ten sam wynik
Alex