Объем сеанса Парамико - PullRequest
0 голосов
/ 08 января 2020

У меня есть некоторые сомнения по поводу Парамико. Если я сделаю стандартный код, найденный в inte rnet:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='remote_host', username='...', password='...')
// TODO
ssh.close()

Допустим, у меня есть какой-то разъем JDB C, и я пытаюсь подключиться к базе данных, поместив код ниже в TODO раздел

ssh.connect(hostname='remote_host', username='...', password='...')
connector.connect(database_params...)
ssh.close()

У меня вопрос. В этом случае клиент сервера базы данных будет remote_host или мой локальный компьютер, на котором выполняется сценарий Python?


Или правильный путь будет использовать sshtunnel? вот так:

with open_tunnel(
    ('remote_host', '22'),
    ssh_username=...,
    ssh_password=...,
    remote_bind_address=('DB_ADDRESS', 'DB_PORT')
    local_bind_address=('SOME_IP', 'SOME_PORT')
) as server:
    connector.connect(db_host='SOME_IP', db_port='SOME_PORT', ...)

Есть ли разница между этими двумя подходами?
Заранее спасибо.

1 Ответ

2 голосов
/ 08 января 2020

Открытие соединения S SH с использованием Paramiko или любым другим способом не оказывает никакого влияния на ваше соединение с базой данных, ни на какие-либо другие соединения, ни на доступ к файлу, ни на выполнение команд. Таким образом, ваш первый код не имеет шансов сделать то, что вы хотите.

Все, что вы хотите сделать через соединение S SH, вам нужно сделать через API Paramiko.

И это что open_tunnel делает для внутреннего использования.

Эквивалентный автономный код см. в описании функции forward_tunnel в Paramiko forward.py demo .

...