Use o IP do servidor via túnel SSH

4

Firslty minha configuração é um laptop Ubuntu e um servidor Ubuntu.

Eu tenho um programa no meu laptop local que precisa acessar um determinado serviço da web, (vamos chamá-lo de link ). Agora este serviço tem um firewall que permite apenas o acesso do IP do meu servidor.

Existe algum tipo de túnel SSH que eu poderia usar entre meu laptop e servidor para que quando um script python no meu laptop envie uma solicitação para o link esse serviço vê o pedido vindo do IP do meu servidor?

Eu sei que seria algo parecido com:

ssh -N -R 80:localhost:80 user@myserver

mas não tenho certeza exatamente.

    
por user143278 30.10.2012 / 10:14

3 respostas

5

O que você quer não é um túnel reverso, mas um túnel regular.

ssh -L 80:someserver.com:80 user@myserver

Isto irá criar um socket de escuta na porta 80 do seu laptop (localhost) que irá para o someserver.com através do servidor SSH no myserver.

Eu normalmente combino túneis com as opções -CfN, -C irá permitir a compressão (acelera um pouco as coisas), -f envia o SSH para o fundo assim que a autenticação estiver completa (então você ainda tem a chance de digitar a senha se necessário), -N fará com que nenhum comando seja executado no servidor SSH (não é realmente seguro ter um SSH rodando em segundo plano que poderia, hipoteticamente, ser usado, enviar comandos para o servidor, é um pouco de paranóia saudável / um bom prática).

Se você não se importa em ter uma conexão muito segura entre seu laptop e o myserver, você também pode alterar a cifra para algo rápido, como blowfish usando -c blowfish ou arcfour128 (que é ainda mais rápido).

Então, o que eu usaria é isto:

ssh -CfNc arcfour128 -L 80:someserver.com:80 user@myserver

O que lhe dará um túnel rápido e agradável que vai direto para o segundo plano, em vez de deixar um prompt de comando aberto no seu servidor.

Lembre-se de que, se você enviá-lo para o segundo plano, quando quiser quebrar o túnel, primeiro terá de encontrar o ID do processo fazendo algo como ps -ef | grep ssh e eliminando o ID do processo correto.

    
por 30.10.2012 / 10:16
1

Você pode usar o proxy SOCKS que o ssh fornece. Conecte-se via

ssh -D 9999 user@myserver

e, em seguida, você pode usar este proxy SOCKS no script python, conforme descrito em Como posso usar um proxy SOCKS 4/5 com urllib2 :

import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9999)
socket.socket = socks.socksocket

(Coloque este código no topo do seu script)

    
por 30.10.2012 / 10:18
0

Minha sugestão seria usar:

ssh -L 8080:localhost:80 user@server

Dessa forma, você não entra em conflito com a porta 80 sendo uma porta privilegiada, conectando seu programa a http://localhost:8080/ . Além disso, eu usaria as opções -C para compactação, -f para o plano de fundo e -N para não abrir um terminal.
Então ssh -CfN -L 8080:localhost:80 user@server deve fazer o

Continuando com o seu comentário, permita-me citar o tutorialspoint.com :

A simple client:

import socket               # Import socket module
s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 8080                # Reserve a port for your service.
s.connect((host, port))
s.close

Como você está usando os meios do Python para se conectar a redes, estou assumindo que há uma declaração connect() em seu código.

(Siga o link para mais informações detalhadas.); -)

    
por 30.10.2012 / 12:43