Подтвердить что ты не робот

Экспедирование в порту с Paramiko

Я пытаюсь сделать переадресацию портов из приложения Python, используя Paramiko. Я могу настроить соединение SSH просто отлично, но я немного озадачен тем, как использовать paramiko.Transport. Я уже нашел этот файл, но не могу понять, что в нем происходит. Из документов paramiko.Transport видно, что в одной строке используется функция open_channel, но я не могу понять, как это реализовать. Я пытаюсь воспроизвести простое ssh -L 8000:localhost:8000.

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

4b9b3361

Ответ 1

Пожалуйста, найдите код с помощью 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

Вы можете использовать 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)