2012-07-02 3 views
19

Я пытаюсь выполнить перенос портов из приложения python с помощью paramiko. Я могу настроить соединение SSH просто отлично, но я немного зациклен на том, как использовать paramiko.transport. Я уже нашел this file, но я не могу понять, что происходит в нем. От взгляда на paramiko.Transport docs кажется, что одна строка использует функцию open_channel, но я не могу понять, как ее реализовать. Я пытаюсь воспроизвести простой ssh ​​-L 8000: localhost: 8000.Перенаправление портов с paramiko

Может ли кто-нибудь помочь мне?

+2

Так что мне удалось получить немного дальше это, и думаю, что я, вероятно, лаем неправильное дерево. Я разработал, как управлять командой open_channel, вызвав get_transport() в origninal-соединении, но затем, когда я пытаюсь открыть с ним прямое или переадресованное соединение tcpip, я получаю Административно запрещено с сервера, что отлично с -L переместить с обычного сеанса SSH. Есть идеи? – TimD

+1

Не могли бы вы разместить свой код/​​раздел кода, который вы используете? –

ответ

14

Пожалуйста, найти код, используя paramiko-1.7.7.1, pycrypto-2.6 и forward.py script, из которого я удалить код из строки 115 до конца (чтобы избежать опций синтаксического анализа).

import paramiko, sys 
from forward import forward_tunnel 

remote_host = "target_host" 
remote_port = 8000 
local_port = 8000 
ssh_host = "my_ssh_host" 
ssh_port = 22 

user  = "login" 
password = "s3cr3t" 

transport = paramiko.Transport((ssh_host, ssh_port)) 

# Command for paramiko-1.7.7.1 
transport.connect(hostkey = None, 
        username = user, 
        password = password, 
        pkey  = None) 

try: 
    forward_tunnel(local_port, remote_host, remote_port, transport) 
except KeyboardInterrupt: 
    print 'Port forwarding stopped.' 
    sys.exit(0) 

Я успешно протестировал его с Windows-станции, используя ssh-сервер под Red Hat и указав на 3-й сервер. (Я использую Python 2.7.2)

Надеется, что это помогает,

+2

Ссылка 'forward.py' не работает. Посмотрите на это: https://github.com/paramiko/paramiko/blob/master/demos/forward.py – alanjds

7

Вы можете использовать https://github.com/pahaz/sshtunnel

pip install sshtunnel 

Пример кода:

import sshtunnel 

with sshtunnel.open(
    (ssh_host, ssh_port), 
    ssh_host_key=None, 
    ssh_username=ssh_user, 
    ssh_password=ssh_password, 
    ssh_private_key=None, 
    remote_bind_address=(REMOTE_HOST, REMOTE_PORT)) as server: 

    def do_something(port): 
     # Do something with port 
     pass 

    print("LOCAL PORT:", server.local_bind_port) 

    do_something(server.local_bind_port) 
+0

выглядит как отступ в примере кода неправильным ...? – Petri

+0

Отступ недействителен, отредактирован и исправлен. – datashaman

+1

Этот пакет не выполняет удаленное перенаправление портов, только локально. – datashaman

Смежные вопросы