ssh através de vários hosts

37

Para chegar à minha máquina no meu escritório, no momento estou fazendo o seguinte:

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"

Existe uma maneira fácil de automatizar esse processo, talvez um único comando que eu possa usar no meu final?

Lucas
fonte
relacionados: Como SSH para usinar A via B em um comando?
Trevor Boyd Smith

Respostas:

31

Você pode usar o cliente ssh para executar o ssh na máquina remota após o login.

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

(A razão pela qual incluí -tnas invocações é porque o ssh estava me dando erros: stdin não era um terminal quando eu tentei em minha própria máquina; sua máquina pode ser diferente.)

Quando você sai do último shell, o processo sai em cadeia, economizando a digitação Ctrl-Drepetidamente.

anfetamaquina
fonte
Atenção: adicione "-t" apenas se você fizer um login na máquina remota. Para iniciar um comando na máquina remota, NÃO os coloque como eles podem / irão corromper algumas coisas (por exemplo tar cf - something | ssh somewhere "cd /path/remote ; tar xf - " :: pode ficar corrompido se você adicionar -t! Veja por exemplo a maravilhosa resposta de StephaneChazelas unix.stackexchange.com/questions/151916/ ... )
Olivier Dulac
3
O uso de -J é mais seguro do que esta resposta, porque você tem a possibilidade de armazenar todas as chaves ssh no computador local. A opção -J foi introduzida no openssh versão 7.3, conforme mencionado na resposta de @Miikka
Erik Sjölund
11
@ ErikSjölund Openssh não permite mais de uma -Jopção. Eu acho que você poderia fazê-lo com várias ProxyCommandopções na sua configuração.
Amphetamachine
11
@ amphetamachine Com -Jvocê pode especificar uma lista de saltos separados por vírgula para percorrer. Mas usar ProxyCommandcom -Wainda é uma abordagem muito melhor do que esta resposta se você estiver usando uma versão muito antiga para suportar -J.
21418 kasperd
35

Sim, existe uma ótima maneira de fazer isso usando ssh ProxyCommand e netcat

Coloque algo assim em seu arquivo .ssh / config

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

Isso fará o logon diretamente em qualquer servidor .department.university.com usando o host de salto / bastião unix.university.com. Você também pode precisar de uma estrofe para unix.university.com diretamente.

Aqui está um link explicando como funciona: http://backdrift.org/transparent-proxy-with-ssh

Com esta técnica, agora você pode apenas escrever

ssh unix.department.university.com

e tudo parecerá direto. Ferramentas como rsync, scp, etc (qualquer coisa na pilha ssh) também funcionarão de forma transparente.

Aaron Brown
fonte
2
+1 Uso algo semelhante a isso para enviar dados de uma rede de teste para uma rede de prod através de um servidor intermediário.
Arcege
2
Sim, isso funciona muito bem!
Gabe.
15
Apenas para o registro, as versões mais recentes do ssh suportam a -Wopção, você pode fazer algo como, em ProxyCommand ssh -W %h:%p gatewayvez de depender de nc
Ulrich Dangel
Bom saber! Thx
Aaron Brown
2
funciona muito bem se o nome do usuário for o mesmo nas máquinas; se for diferente, você tem que fazer algo assimProxyCommand ssh -W %h:%p user@gateway
Riccardo Cossu
9

No OpenSSH 7.3, o ssh adicionou o -Jsinalizador da linha de comando e a ProxyJumpopção de configuração correspondente para resolver exatamente esse problema.

Forneça aos hosts que você deseja enviar como uma lista separada por vírgulas -J. Por exemplo:

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

Tunelamento SSH. Não me lembro exatamente como fazer isso, mas sei que há uma maneira de uma máquina permitir um túnel, talvez conectando-se a uma porta separada. Dessa forma, você apenas concede à mesma máquina inicial (com uma porta diferente, por exemplo) e ela o posiciona na sua localização final.

Teria que procurar como configurá-lo embora.

:)

Anthony Hurst
fonte
Você não quer (e, provavelmente, você não pode) abrir uma porta ou seu gateway ssh universidade ...
Stéphane Gimenez
9
Se você não sabe como fazê-lo e não pode se incomodar em procurá-lo, por que postou esta resposta?
Amphetamachine
4
Não é realmente uma resposta
gabe.