ssh tramite più host


37

Per arrivare alla mia macchina nel mio ufficio, al momento lo sto facendo:

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

C'è un modo semplice per automatizzare questo processo, forse un singolo comando che posso usare alla mia fine?


Risposte:


31

È possibile utilizzare il client ssh per eseguire ssh sul computer remoto al momento dell'accesso.

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

(La ragione per cui includo -tnelle invocazioni è perché ssh mi stava dando errori riguardo a: stdin non era un terminale quando l'ho provato sulla mia macchina; la tua macchina potrebbe essere diversa.)

Quando esci dall'ultima shell, il processo termina in sequenza, salvandoti Ctrl-Dripetutamente a digitare .


Nota: aggiungi "-t" solo se esegui un login sul computer remoto. Per avviare un comando sul computer remoto, NON metterli come possono / corromperanno alcune cose (per esempio tar cf - something | ssh somewhere "cd /path/remote ; tar xf - " :: potrebbero danneggiarsi se aggiungi -t! Vedi per esempio la risposta meravigliosa di StephaneChazelas unix.stackexchange.com/questions/151916/ ... )
Olivier Dulac il

3
L'uso di -J è più sicuro di questa risposta, perché hai quindi la possibilità di memorizzare tutte le chiavi ssh sul tuo computer locale. L'opzione -J è stata introdotta nella versione 7.3 di openssh come indicato nella risposta di @Miikka
Erik Sjölund

1
@ ErikSjölund Openssh non consente più di -Jun'opzione. Penso che potresti farlo con più ProxyCommandopzioni nella tua configurazione.
anfetamachina,

1
@amphetamachine With -Jè possibile specificare un elenco di luppoli separato da virgole da esaminare. Ma usare ProxyCommandcon -Wè ancora un approccio molto migliore di questa risposta se ti capita di usare una versione troppo vecchia per supportare -J.
Kasperd,

35

Sì, c'è un ottimo modo per farlo usando ssh ProxyCommand e netcat

Inserisci qualcosa di simile nel tuo .ssh / config

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

Ciò accederà direttamente a qualsiasi server .department.university.com utilizzando l'host jump / bastion unix.university.com. Potresti anche aver bisogno di una stanza per unix.university.com direttamente.

Ecco un link che spiega come funziona: http://backdrift.org/transparent-proxy-with-ssh

Con questa tecnica, ora puoi semplicemente scrivere

ssh unix.department.university.com

e sembrerà tutto diretto. Anche strumenti come rsync, scp, ecc. (Qualsiasi cosa nello stack ssh) funzioneranno in modo trasparente.


2
+1 Uso qualcosa di simile a questo per spingere i dati da una rete di test a una rete prod attraverso un server di gestione temporanea.
Arcege,

2
Sì, funziona alla grande!
gabe.

15
Solo per il record le nuove versioni di ssh supportano l' -Wopzione, puoi fare qualcosa di simile ProxyCommand ssh -W %h:%p gatewayinvece di dipendere da nc
Ulrich Dangel

Buono a sapersi! Grazie
Aaron Brown,

2
funziona alla grande se il nome dell'utente è lo stesso su tutte le macchine; se è diverso devi fare qualcosa del genereProxyCommand ssh -W %h:%p user@gateway
Riccardo Cossu,

9

In OpenSSH 7.3, ssh ha aggiunto il -Jflag della riga di comando e l' ProxyJumpopzione di configurazione corrispondente per risolvere esattamente questo problema.

Fornisci agli host che desideri visualizzare come elenco separato da virgole -J. Per esempio:

ssh -J unix.university.com,unix.department.university.com  \
  office-machine.department.university.com

-5

Tunneling SSH. Non ricordo esattamente come farlo, tuttavia so che esiste un modo per far sì che una macchina consenta un tunnel collegandosi forse a una porta separata. In questo modo esegui semplicemente lo shell sulla stessa macchina iniziale (ad esempio con una porta diversa) e ti farà cadere nella posizione finale.

Dovrebbe cercare come configurarlo però.

:)


Non vuoi (e probabilmente non puoi) aprire un porto o il tuo gateway SSH universitario ...
Stéphane Gimenez

9
Se non sai come farlo e non puoi preoccuparti di cercarlo, perché hai pubblicato questa risposta?
anfetamachina,

4
Non proprio una risposta
gabe.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.