ssh przez wiele hostów

37

Aby dostać się do mojej maszyny w biurze, w tej chwili robię to:

me@home:~$ ssh unix.university.com
me@unix:~$ ssh unix.department.univeristy.com
[email protected]:~$ ssh office-machine.department.university.com
me@office-machine:~$ echo "This is very annoying"

Czy istnieje prosty sposób zautomatyzowania tego procesu, być może jedno polecenie, którego mogę użyć na końcu?

Lucas
źródło

Odpowiedzi:

31

Możesz użyć klienta ssh do uruchomienia ssh na zdalnym komputerze po zalogowaniu.

ssh -t unix.university.com \
    ssh -t unix.department.univeristy.com \
    ssh -t office-machine.department.university.com

(Powodem, dla którego uwzględniam -tw wywołaniach jest to, że ssh dawał mi błędy dotyczące: stdin nie będąc terminalem, gdy próbowałem go na moim komputerze; twoja maszyna może być inna.)

Kiedy wyjdziesz z ostatniej powłoki, proces zakończy łańcuch, oszczędzając Ci ciągłego pisania Ctrl-D.

amfetamachina
źródło
Uwaga: dodaj „-t” tylko, jeśli logujesz się tylko na zdalnym komputerze. Aby uruchomić polecenie na zdalnej maszynie, NIE umieszczaj ich, ponieważ mogą / mogą uszkodzić niektóre rzeczy (na przykład tar cf - something | ssh somewhere "cd /path/remote ; tar xf - " :: mogą zostać uszkodzone, jeśli dodasz -t! Zobacz na przykład odpowiedź wspaniałego StephaneChazelas unix.stackexchange.com/questions/151916/ … )
Olivier Dulac,
3
Użycie -J jest bezpieczniejsze niż ta odpowiedź, ponieważ masz wtedy możliwość przechowywania wszystkich kluczy ssh na komputerze lokalnym. Opcja -J została wprowadzona w wersji 7.3shsh, jak wspomniano w odpowiedzi @Miikka
Erik Sjölund
1
@ ErikSjölund Openssh nie zezwala na więcej niż jedną -Jopcję. Myślę, że możesz to zrobić z wieloma ProxyCommandopcjami w konfiguracji.
amfetamachina
1
@amphetamachine Za pomocą -Jmożesz określić rozdzieloną przecinkami listę przeskoków do przejścia. Ale używanie za ProxyCommandpomocą -Wjest nadal znacznie lepszym rozwiązaniem niż ta odpowiedź, jeśli zdarzy się, że używasz wersji zbyt starej, aby ją obsługiwać -J.
kasperd
35

Tak, jest świetny sposób, aby to zrobić za pomocą ssh ProxyCommand i netcat

Umieść coś takiego w swoim .ssh / config

Host *.department.university.com
User me
ForwardAgent yes
ProxyCommand ssh unix.university.com nc %h %p

Spowoduje to zalogowanie się bezpośrednio do dowolnego serwera .department.university.com za pomocą hosta jump / bastion unix.university.com. Możesz także potrzebować sekcji bezpośrednio dla unix.university.com.

Oto link wyjaśniający, jak to działa: http://backdrift.org/transparent-proxy-with-ssh

Dzięki tej technice możesz teraz pisać

ssh unix.department.university.com

i wszystko będzie wyglądało bezpośrednio. Narzędzia takie jak rsync, scp itp. (Cokolwiek w stosie ssh) również będą działać przezroczyście.

Aaron Brown
źródło
2
+1 Używam czegoś podobnego do tego, aby przepchnąć dane z sieci testowej do sieci prod za pośrednictwem serwera pomostowego.
Arcege
2
Tak, to działa świetnie!
Gabe.
15
Tylko dla rekordu nowsze wersje ssh obsługują tę -Wopcję, możesz zrobić coś takiego, ProxyCommand ssh -W %h:%p gatewayzamiast polegać na nc
Ulrich Dangel
Dobrze wiedzieć! Dzięki
Aaron Brown
2
działa świetnie, jeśli nazwa użytkownika jest taka sama na różnych komputerach; jeśli jest inaczej, musisz zrobić coś takiegoProxyCommand ssh -W %h:%p user@gateway
Riccardo Cossu,
9

W OpenSSH 7.3 ssh dodał -Jflagę wiersza poleceń i odpowiednią ProxyJumpopcję konfiguracji, aby dokładnie rozwiązać ten problem.

Daj hostom, przez które chcesz ssh, listę rozdzieloną przecinkami -J. Na przykład:

ssh -J unix.university.com,unix.department.university.com  \
  office-machine.department.university.com
Miikka
źródło
-5

Tunelowanie SSH. Nie pamiętam dokładnie, jak to zrobić, ale wiem, że istnieje sposób, aby w zasadzie maszyna zezwoliła na tunel, być może podłączając się do osobnego portu. W ten sposób po prostu uruchomisz powłokę na tej samej maszynie początkowej (na przykład z innym portem), co spowoduje umieszczenie cię w ostatecznej lokalizacji.

Musiałbym jednak sprawdzić, jak to skonfigurować.

:)

Anthony Hurst
źródło
Nie chcesz (i prawdopodobnie nie możesz) otworzyć portu lub bramy uniwersyteckiej ssh…
Stéphane Gimenez
9
Jeśli nie wiesz, jak to zrobić i nie możesz zadać sobie trudu, aby to sprawdzić, dlaczego opublikowałeś tę odpowiedź?
amfetamachina
4
Naprawdę nie odpowiedź
gabe.