
Como configuro o Putty para uma conexão de túnel SSH de 3 saltos? Eu sei como configurar o Putty para uma conexão de túnel SSH de 2 saltos, mas agora estou procurando uma maneira de configurá-lo com 3 saltos. Alguém pode me explicar o procedimento de como podemos conseguir isso?
Para dois saltos, estou seguindo o método abaixo.
Windows 10 (Putty) -> Linux Machine1 (192.168.1.100) -> Linux Machine2 (192.168.1.150)
- Na janela da sessão é fornecido o endereço de destino (192.168.1.150) e a porta 22.
- Na opção Proxy, forneci o IP do servidor intermediário (192.168.1.100) e a porta 22.
- Também para o comando telnet, forneci o seguinte.
plink -agent -l %usuário %proxyhost -nc %host:%porta
A configuração acima funciona bem por 2 saltos. Mas agora meu requisito é um túnel SSH de 3 saltos. Como modifico o atual e adiciono mais 1 salto?
Responder1
Não está claro se você deseja apenas se conectar a uma máquina adicional na mesma rede que as Máquinas Linux 1/2 ou se precisa pular para outra rede além delas (por exemplo, Máquina 4 em 172.22.1.x).
Se você está simplesmente tentando acessar outra máquina na mesma rede 192.168.1.x da Máquina Linux 1/2, use umTúnel SSH(encontrado no menu do Putty Connection -> SSH -> Tunnels
). Você pode configurar vários túneis para quantas máquinas precisar.
Se você estiver realmente tentando acessar uma terceira rede, poderá abrir outra instância do Putty que se conecta por meio de um túnel definido em sua instância original do Putty.
- Defina um túnel no Putty que encaminhe uma porta na sua máquina local (2222 por exemplo) para a porta 22 no Linux Machine2
- Em seguida, abra outra instância do Putty em sua máquina Windows que usa o túnel (ou seja, conecte-se ao Localhost:2222) E defina um novo túnel para encaminhar uma porta adicional (2223, por exemplo) para a porta 22 na Máquina4 (seu terceiro salto).
- Abra mais uma instância do Putty e conecte-se ao Localhost:2223 para acessar o Machine4
Eu só fiz isso com 2 saltos, então não sei como será o desempenho. Não é uma solução ideal, mas pode funcionar se esta for a sua única opção.
Editar: se você não está limitado ao Windows/Putty,isto (SSH multi-hop transparente)pode fazer o que quiser. Se você está limitado ao Windows,Cygwinpode ter algumas ferramentas SSH mais flexíveis.
Responder2
Túnel multihop com PuTTY
PuTTY -> jHost1 (jIP1) -> jHost2 (jIP2) -> Destino (dIP)
Resposta rápida:
Sua abordagem está correta, basta usar o plink para jHost1 como proxy local para o plink para jHost2:
plink user2@jHost2 -nc dIP:dPort -proxycmd "plink user1@jIP1 -loghost jHost1 -nc jIP2:jPort2"
Mais elaboração e advertências:
Use
-t
(em ambos os plinks) para que seusinais terminaisfunciona (já que você não está invocando um shell remoto nos hosts de salto)Hásenhas em texto simples(na linha de comando/configuração do PuTTY) quando
-l user -pw password
é usado (não importa se você usa o espaço reservado do PuTTY% proxypass).- use
-i
para especificar uma chave privada sem senha (já que a E/S padrão é usada pelo PuTTY e você não poderá inseri-la) - ou use
-agent
para usar as chaves do Pageant - o encaminhamento de agente (
-a
) não é necessário porque os plinks são executados localmente.
- use
Execute os plinks na linha de comando pela primeira vez para ver se não há perguntas adicionais. Geralmente você recebe um "O pacote recebido foi distorcido na descriptografia"erro, se o plink solicitar que você importe a chave SSH do jHost.
Cuidado com o uso de
jHost
ejIP
. Com issojHost
quero dizer onome de host lógicopara pesquisa de chave "known_hosts" do plink (armazenamento PuTTY no registro do Windows).jIP
é o nome/IP do próximo salto acessível a partir do salto atual. (Você geralmente está se conectando de outra rede e não consegue reativarjHost
.)- O plink externo pode ser usado simplesmente
jHost2
porque a conexão é proxy e não há nenhuma pesquisa de DNS. - O plink interno deve usar o
jIP1
para se conectar,-loghost jHost1
para a pesquisa da chave local e-nc jIP2:jPort2
para o NetCat para o próximo salto.
- O plink externo pode ser usado simplesmente
Se você precisar usarEncaminhamento TCPno Destino (que deve ser permitido), a única coisa que você precisa fazer é configurá-lo no PuTTY como se não houvesse nenhum host de salto. Isso ocorre porque a conexão SSH com o destino é encapsulada por meio de jHost2 e essa conexão, por sua vez, por meio de jHost1, e os hosts de salto não têm nenhuma visão do túnel.
- Ao contrário de apenas sshing para pular o host e executar o ssh novamente para chegar ao destino, onde você precisa usar
<enter>~C<enter>
a sequência para escapar para o cliente ssh do host de salto e usar comandos-L
/-R
para adicionar túneis dinamicamente.
- Ao contrário de apenas sshing para pular o host e executar o ssh novamente para chegar ao destino, onde você precisa usar
Sem encaminhamento TCP
plink -nc
( ssh -W
equivalente) é um proxy local que encaminha sua E/S padrão por TCP por meio de um host de salto. Se você não conseguir permitir o encaminhamento de TCP nos hosts de salto, como uma solução alternativa limitada, você pode usar ssh jHost1
e usar ssh user2@jHost2 -t ssh user@Destination
em "Conexão -> SSH -> Comando Remoto" sem configurações de proxy.
Dessa forma, você inicia um novo cliente ssh no host de salto (e as chaves devem estar presentes/senhas redigitadas/encaminhadas pelo agente, configuração/known_hosts duplicados...).