Como faço para conectar a um PC através de outro PC usando ssh

13

Eu tenho três computadores.

PC1 e PC2 estão em uma LAN privada, onde PC1 é conhecido por PC2 como192.168.0.2

PC2 e PC3 está em outra LAN, onde PC2 é conhecido por PC3 como192.168.123.101

Como posso conectar ao PC1 do PC3 com SSH.

Existe algo como:

ssh [email protected] -via [email protected]
Stefan
fonte

Respostas:

19
ssh -o 'ProxyCommand ssh -W %h:%p [email protected]'

Então você pode simplesmente correr ssh PC1.

Melhor usado através de um alias em ~/.ssh/config:

Host PC1
HostName 192.168.0.2
User user
ProxyCommand ssh -W %h:%p [email protected]

Para versões mais antigas do OpenSSH que não têm a -Wopção (acho que isso significa ≤5,4), verifique se o netcat está disponível no PC2 e use

Host PC1
HostName 192.168.0.2
User user
ProxyCommand ssh [email protected] nc %h %p
Gilles 'SO- parar de ser mau'
fonte
1
+1 Sim, e eu tenho uma resposta semelhante stackoverflow.com/questions/1010808/1122282#1122282 com mais alguns detalhes.
ephemient
necessário para instalar o netcat
Stefan
4

Usando o SSH, há uma solução clara:

  1. na sua máquina local, configure o seu de ~/.ssh/configforma que ele tenha o seguinte:

    host WhatYouWillCallTheConnection
        hostname the.gateway.server.address.com
        user YourUsernameOnTheGateway
    
  2. No gateway e no servidor final aos quais você deseja se conectar, verifique se as chaves públicas do seu cliente local estão localizadas no diretório ~/.ssh/authorized_keys

  3. Na máquina do gateway, é necessário alterar o ~/.ssh/authorized_keysmodo que, no início da linha que especifica a chave pública do seu cliente, adicione o comando forçado da seguinte maneira:

    command="ssh -A [email protected]" ...yourPublicKey....
    

O -Aé encaminhar o agente se você não gosta de enviar senhas o tempo todo ...

Dessa forma, sempre que você fizer algo parecido, ssh WhatYouWillCallTheConnectionele passará direto pelo gateway e o conectará ao servidor do outro lado de forma transparente.

Shamster
fonte
2
Não use ssh -Ase não confiar no administrador da máquina de gateway. Ele não pode obter sua chave privada, mas enquanto você estiver conectado ao gateway ssh -A, ele poderá usar o agente encaminhado para conectar-se a outras máquinas como você.
quer
2

O encaminhamento de porta pode ser útil.
Do PC1:

~# ssh -fN -L 22:PC3:7777 -l <user> PC2  

O 7777 pode ser qualquer porta (desde que ainda não esteja sendo usada). Eu apenas gosto desse número, mais qualquer "pedido" que eu possa gerenciar por +1 (7778, 7779, etc, etc).

Isso está sendo feito, você terá um túnel 'transparente' da porta local 7777 do PC1 para a porta 22 do PC3. Basta emitir:

~# ssh -l <user> -p 7777 localhost  

E você deve estar no PC3.
Você também pode usar -D para encaminhar dinamicamente uma porta, se desejar que um proxy SOCKS seja estabelecido.

~# ssh -D <someport> -fN -L 22:PC3:7777 -l <user> PC2  

Felicidades!

wormintrude
fonte
1

A resposta 2017+ (desde o v7.3) para isso é ProxyJump :

ssh -J user@jumphost user@destination

, que é abreviação de:

ssh -o "ProxyJump user@jumphost" user@destination

Isso pode ser reduzido ssh destcom um ~/.ssh/configtrecho de código como tal:

Host jump
    User MyJumpHostUser
    Hostname Jump.host.tld

Host dest
    ProxyJump jump
    User MyDestUser
    Hostname des.tin.ati.on
Alex Stragies
fonte
0

A única solução que eu conheço para isso é o script ssh com Belier :

Belier permite abrir um shell ou executar um comando em um computador remoto através de uma conexão SSH. A principal característica do Belier é sua capacidade de atravessar vários computadores intermediários antes de realizar o trabalho.

Há um tempo atrás encontrei este README.sshhop na página inicial do Laboratório do Lincoln do MIT, mas não consegui encontrar mais informações sobre isso. Alguém sabe mais?

echox
fonte