Encaminhar SSH através do túnel SSH

30

Minha situação :

Eu (host local) -> Servidor A (ip: 100.100.100.100) => (servidor B (ip: 192.168.25.100), servidor ....)

Eu sou capaz de SSH no servidor, uma vez que tem um ip verdadeiro, se eu quiser conectar ao servidor b, eu ssh servidor b com ele é ip (192.168.25.100)

exemplo:

do meu pc:

ssh [email protected]

em 100.100.100.100,

ssh [email protected]

isso me levaria ao servidor B com ssh

e se eu quiser conectar-me ao servidor b diretamente? Como eu posso fazer isso?

exemplo:

do meu oc:

[email protected]

Eu tentei o seguinte:

ssh -L 22:localhost:22 [email protected]

sem sucesso

tom91136
fonte

Respostas:

30

Seu problema está em vincular um ouvinte ao localhost: 22; já existe um sshd ouvindo isso. O encapsulamento de uma conexão ssh por meio de uma conexão ssh é completamente legal, e eu faço isso o tempo todo, mas você precisa escolher portas não utilizadas para seus ouvintes de encaminhamento.

Experimentar

me% ssh [email protected] -L 2201:192.168.25.100:22

então

me% ssh localhost -p 2201

Você deve terminar no servidor B (a menos que algo já esteja vinculado a mim: 2201, nesse caso, escolha outra porta).

MadHatter apoia Monica
fonte
Obrigado pela resposta rápida! funciona, no entanto, como posso encaminhar todas as conexões em vez de apenas ssh (22)?
tom91136
1
Essa é uma VPN completa que você procura, não apenas o encaminhamento de porta. Há um artigo sobre como executar o vpn-over-ssh em bodhizazen.net/Tutorials/VPN-Over-SSH , mas requer acesso root remoto via ssh no A. Ou você pode procurar o OpenVPN ou outras soluções VPN, mas, novamente, você precisará do privilégio em A para fazer isso funcionar.
MadHatter apoia Monica
muito obrigado, uma última coisa, e se eu quiser apenas me conectar ao A?
tom91136
me% ssh [email protected]; nós já não cobrimos isso? ou você quer dizer "e se eu quiser uma VPN completa para A?", caso em que minha resposta permanece.
MadHatter apoia Monica
1
Para pessoas que desejam VPN sobre SSH, não têm acesso root no servidor, mas ele possui Python, tente sshuttle .
André Paramés
23

Você não precisa usar o encaminhamento de porta ssh para ssh em um computador interno por meio de um proxy. Você pode usar o recurso ssh de executar um comando no primeiro servidor ao qual você se conecta, a fim de ssh em um terceiro computador.

ssh -t [email protected] ssh [email protected]

A -topção força o ssh a alocar um pseudo-tty para que você possa executar um comando interativo.

Isso também pode funcionar com as teclas ssh. Se você tiver sua chave pública e privada na máquina A e sua chave pública nos arquivos de chaves autorizadas nas máquinas B e C, poderá usar a -Aopção para encaminhar a conexão do agente de autenticação.

Jeff Strunk
fonte
10

Eu usei uma solução diferente. Eu usei uma ProxyCommandopção (aqui em ~/.ssh/config):

Host myinsidehost1 myinsidehost2 myinsidehost3
ProxyCommand ssh externalhost ssh %h sshd -i

Isso não configura nenhum túnel de porta a porta; em vez disso, encapsula o ssh usando stdin / out padrão. Esse método tem uma desvantagem de que na verdade existem três conexões ssh para autenticar. Mas para se conectar ao host interno, basta digitar:

ssh myinsidehost2

... para que você não precise se preocupar em escolher nenhum IP para esse túnel.

liori
fonte
1
Este é o único tipo de empilhamento SSH que eu acho que funciona. Eu tentei corkscrewou nc( netcat), mas nenhum funciona tão perfeitamente quanto isso.
Phuong Nguyen 16/09
7

de acordo com a página de manual do ssh, ProxyCommand é o método correto

a sintaxe é:

ProxyCommand ssh -W %h:%p user@jumphost 2> /dev/null
empacotador
fonte
Não sei se a -Wopção existia quando esta pergunta foi respondida. Mas com as versões mais recentes do cliente ssh, concordo que a combinação de ProxyCommande -Wé o método preferido. Talvez adicione algum contexto mostrando como ele pode ser usado na linha de comando, bem como um exemplo de uma seção para .ssh/config.
precisa saber é o seguinte
Alguma idéia de onde encontrar as informações de changelogs / version que nos dizem quais versões do SSH têm o -Wcomando e quais não? Um pouco de googling não deu respostas rapidamente para mim ...
dmh
-Wfoi introduzido com o OpenSSH 5.4, lançado em 2010. Portanto, a resposta é sim @kasperd
0xC0000022L
7

A partir do OpenSSH 7.3 (final de 2016), a maneira mais fácil é a configuração do ProxyJump . No seu ~/.ssh/config:

Host B
  ProxyJump A

Ou na linha de comando,, -J B.

arantius
fonte