Версия ssh -D для Python (прокси-сервер SOCKS через SSH)

Я пытаюсь использовать urllib2 через прокси, чтобы удалить веб-страницу, которая не доступна напрямую (она работает в локальной сети удаленного сервера и недоступна извне). Я бы предпочел прокси-сервер SSH SOCKS (например, если вы запустите ssh -D 9090 server), потому что у меня есть к нему доступ, и потому, что он достаточно безопасен.

Я ковырялся с paramiko, но все, что я нахожу, указывает на запуск SSH-соединения через SOCKS, что является противоположностью тому, что я на самом деле пытаюсь достичь здесь.

Я видел транспортный класс, но он выполняет только тупую переадресацию и не предоставляет приятного интерфейса прокси OpenSSH-SOCKS, который я могу подключиться с помощью SocksiPy (и др.).

Net :: SSH :: Socks for Ruby - это именно то, что я ищу в неправильный язык. Есть ли в Python что-нибудь, что предоставляет прокси-сервер через SSH?


person Oli    schedule 07.08.2013    source источник


Ответы (1)


У меня есть обходной путь, который подходит для очистки. Вместо того, чтобы пытаться использовать SSH-соединение, я использую удаленную оболочку для извлечения данных:

from bs4 import BeautifulSoup
import paramiko

ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.connect('example.com', username='Oli', look_for_keys=True, timeout=5)

stdin, stdout, stderr = ssh.exec_command('/usr/bin/wget -qO- "%s"' % url)
soup = BeautifulSoup(stdout)

ssh.close()

Это не то, что я искал с самого начала (и мне все еще очень хотелось бы увидеть, есть ли способ подключить сокет SOCKS через SSH), но в его простоте есть некоторая элегантность.

person Oli    schedule 07.08.2013
comment
Вы нашли другой способ? Мне нужна такая же функциональность, как и с параметром ssh -D. - person BigSack; 28.01.2014