Paramiko会话范围

时间:2020-01-08 16:20:52

标签: python ssh paramiko portforwarding ssh-tunnel

我对Paramiko有一些疑问。如果我做了互联网上找到的标准代码:

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

假设我有某种JDBC连接器,我尝试连接到将代码放在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 个答案:

答案 0 :(得分:2)

使用Paramiko或任何其他方式打开SSH连接,对您的数据库连接,任何其他连接,文件访问或命令执行都没有任何影响。因此,您的第一个代码将无法执行您想要的操作。

您想通过SSH连接进行的所有操作,都需要通过Paramiko API进行。

这就是open_tunnel内部的作用。

有关等效的独立代码,请参见Paramiko forward.py demo中的forward_tunnel函数。