Túnel uma conexão ssh através de uma máquina intermediária em um único comando

10

Existe uma maneira, em um único comando, de estabelecer uma conexão ssh do meu computador A, através do computador B, para o computador C, de modo que eu tenha acesso ao shell no computador C?

Um problema (que parece descartar simplesmente encaminhar a conexão ssh usando a opção -L) é que eu tenho a senha da conta no computador B e a conta no computador B está autorizada a conectar-se à conta no computador C, mas Não tenho a senha da conta no computador C.

sanidade
fonte

Respostas:

8

Entendi que você deseja apenas fazer login no computador C, não encapsular nada de A a C. Então, isso deve fazer o truque:

ssh -t computer-b "ssh computer-c"

Pode ser necessário digitar as senhas duas vezes, primeiro no computador B e depois no computador C, mas isso pode ser evitado usando a autenticação de par de chaves do ssh.

af.
fonte
1
Obrigado - funciona! Se eu tiver a ousadia de pedir um acompanhamento. Alguma idéia de como posso scp um arquivo de A a C em um único comando?
sanidade
Isso é um pouco complicado. Isso pode ser feito adicionando tar à mistura, mas se houver apenas um arquivo e o computador B tiver espaço em disco para mantê-lo por um tempo, é muito mais fácil copiá-lo em duas etapas.
af.
Você também pode fazer isso três vezes! ssh -t computer-b "ssh -t computer-c 'ssh computer-d'": D
gak
0

Você provavelmente deseja usar o ProxyCommand do SSH: http://benno.id.au/blog/2006/06/08/ssh_proxy_command

Rory
fonte
Não consigo encontrar uma maneira de fazer isso funcionar porque não tenho a senha do computador C, e essa abordagem parece exigir isso. Aberto a sugestões, pois essa abordagem parece mais elegante.
27510 sanity
0

Se você estiver usando chaves ssh, poderá gerar uma nova chave para a máquina B e usá-la para conectar-se de A a B. Na máquina B, você pode adicionar

command="ssh C" ssh-....

no ~/.ssh/authorized_keysarquivo Isso significa que sempre que você se conectar a B com essa chave ssh, ele executará o ssh Ccomando.

Não sei se isso funciona com o scp.

Rory
fonte
0

Usar ProxyCommand

Veja man ssh_config. Eu recomendo fazer uso ProxyCommand. Vamos pegar o seu cenário original:

  • Computador A (seu computador)
  • Computador B (um nome de host proxy)
  • Computador C (apenas acessível via SSH a partir do Computador B)

Edite ~/.ssh/configcom o seguinte conteúdo.

Host computerb
    HostName <hostname or IP of Computer B>

Host computerc 192.168.35.*
    ProxyCommand ssh computerb nc -w 180 %h %p

Agora você poderá acessar de forma transparente o Computador C.

ssh computerc

Vantagens deste método

Mais seguro

Você só precisa que sua chave privada esteja no Computador A (seu computador). O nccomando atuará como um proxy no qual o SSH criptografará o tráfego. Isso inclui autenticação. É uma péssima idéia distribuir sua chave privada para vários servidores (como qualquer servidor comprometido com sua chave privada acaba comprometendo sua chave privada).

Corresponde a vários destinos

Pode-se combinar vários computadores de destino usando Host. Um único computador ou qualquer computador dentro de uma rede específica (por exemplo, 192.168.35.0/24no exemplo acima) para proxy através do Computador B. Também serve como um alias.

ssh 192.168.35.27

No exemplo acima, ele fará proxy através do Computador B para acessar o endereço IP.

Proxies da cadeia da margarida

Usando esse método, você pode encadear quantos proxies automáticos forem necessários. por exemplo, você pode adicionar um Computador D que só pode ser acessado pelo Computador C e funcionará de forma transparente.

Host computerd
    ProxyCommand ssh computerc nc -w 180 %h %p

ssh computerdproxy automaticamente através do Computador C e Computador B nos ssh_configexemplos acima .

Sam Gleske
fonte
Estou usando ProxyJump em vez de ProxyCommand e funciona bem. Parece que agora existem mais opções.
fgiraldeau 27/03