Como sei se meu túnel ssh foi criado com sucesso?

21

Eu confio no script a seguir tunnel.sh escrito por outros para manter um túnel ssh ativo:

#!/bin/bash
export SSH_HOST=tim@server 

if [ ! -f /tmp/.tunnel ] 
then
echo "Creat SSH tunnel"
ssh -f -D 9999 $SSH_HOST "if [ -f ~/.tunnel ]; then rm ~/.tunnel; fi; while [ ! -f ~/.tunnel ]; do echo > /dev/null; done" & 
touch /tmp/.tunnel 
else
echo "Close SSH tunnel"
ssh $SSH_HOST "touch ~/.tunnel" 
rm /tmp/.tunnel 
fi
exit

Para criar um túnel ssh persistente, apenas emito tunnel.sh . O túnel não será fechado até eu emitir tunnel.sh novamente.

Eu queria saber como posso verificar se o túnel ssh é realmente criado com sucesso?

Meu uso principal do túnel é imprimir documentos em algumas impressoras na mesma LAN que o servidor, e as impressoras só podem ser acessadas de dentro da LAN. Depois de criar um túnel, a impressão agora não relata nenhum problema, mas como não estou fisicamente lá, não consigo verificar se os documentos foram realmente impressos.

Eu pensei que desde que eu estou agora na rede graças ao túnel, meu IP externo deve ser o mesmo que o do servidor. Mas na verdade eles não são os mesmos (eu os descobri por wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' ). Eu quero saber porque? Quando me conecto a algum site na internet com o tunel vivo, o servidor não é o ponto médio entre mim e o site da internet na conexão, devido ao túnel entre mim e o servidor?

    
por Tim 24.01.2012 / 17:46

3 respostas

24

Isso é muito mais complicado do que precisa ser: -)

Inicie o túnel:

ssh -f -N -D 9999 -M -S /tmp/ssh_tunnel_%h.sock -o ExitOnForwardFailure=yes $SSH_HOST && \
echo "ssh tunnel started successfully" || \
echo "ssh tunnel failed to start"

Pare o túnel:

ssh -S /tmp/ssh_tunnel_%h.sock -O exit $SSH_HOST

.

Isso é tudo que você precisa fazer. Se você quiser os detalhes, pule abaixo.

Para sua segunda pergunta, a IP. Não, o seu IP não muda. Tudo o que você fez foi criar um proxy SOCKS através do host remoto. Seu sistema não usa automaticamente este proxy, a menos que você o diga.

Explanação do SSH
Args para iniciar o túnel:
-f : informa o ssh ao próprio plano de fundo. Ele só fará o seu próprio background se for iniciado com sucesso (coopera com o argumento -o abaixo).
-o ExitOnForwardFailure=yes : Isso diz ao ssh para sair se ele não puder configurar o proxy SOCKS.
-N Não execute um comando. Nós só queremos encapsular, não fazer nada no host remoto.
-D 9999 : Seu proxy SOCKS.
-M : Isso é necessário para o argumento -S funcionar aqui.
-S /tmp/ssh_tunnel_%h.sock : Isto diz para usar o /tmp/ssh_tunnel_HOSTNAME.sock para seu soquete de controle. A opção -M informa que o ssh precisa configurar este soquete e não emitir comandos para outro ssh que já esteja escutando no soquete. Você pode usar esse soquete para configurar túneis adicionais depois que o ssh já estiver em execução. O %h usa o nome do host do host remoto como parte do nome do arquivo.

Args para parar o túnel:
-S /tmp/ssh_tunnel_%h.sock : Isso deve ser óbvio. No entanto, como não emitimos um -M, isso significa que o ssh deve se conectar ao soquete que já existe e dizer o que fazer, em vez de fazer algo sozinho.
-O exit : Isso faz parte do -S . Dizemos ao ssh que escuta na tomada para sair. O $SSH_HOST ainda é necessário aqui. Mesmo se você fosse especificar um caminho de soquete absoluto, sem usar %h no nome do arquivo, o ssh ainda desejaria que um host remoto fosse especificado. É por isso que eu coloquei o %h nos argumentos. Poderia também usá-lo se o ssh pedisse o host e mantivesse as coisas organizadas.

    
por 25.01.2012 / 03:19
5

Este tipo de túnel não altera a informação do seu endereço IP. Tudo o que ele faz é dizer ao seu computador para abrir a porta 9999 e encaminhar conexões para essa porta para a máquina remota (tim @ server) através da sua conexão ssh. A maneira mais fácil de testar se a conexão está ativa é telnet para a porta na qual o encaminhador foi criado (em seu exemplo 9999):

$ telnet localhost 9999
Trying server...
Connected to server.
Escape character is '^]'.

Se você receber o "Conectado ao servidor". mensagem, isso significa que seu túnel está funcionando. Se, em vez disso, você obtiver: "Não é possível conectar-se ao host remoto: Conexão recusada", o seu túnel não está ativo.

Quanto à sua segunda pergunta, para o seu navegador, o navegador não usará o túnel, a menos que você o diga. Nas configurações de rede dos navegadores, você pode definir as configurações de proxy e especificar localhost: 9999 como um proxy socks5 e, em seguida, suas conexões da web devem usar o túnel ssh e parecer vir do endereço IP do servidor.

    
por 24.01.2012 / 18:13
1

No meu caso (Google Chrome no Ubuntu 14.10), meu endereço externo muda, pelo menos dentro do navegador. Apenas google "Qual é o meu endereço IP?" com e sem a conexão proxy.

Além disso, depois de configurar o proxy, tente destruir o túnel e veja se ainda é possível obter tráfego. Quando faço isso, o chrome retorna um erro "Não é possível conectar-se ao servidor proxy".

Outra maneira: após o tunelamento para o host remoto, crie uma nova sessão ssh e execute tcpdump -A dst port 80 . Em seguida, navegue até uma página e você verá o tráfego relacionado no terminal.

    
por 10.07.2015 / 15:50