Paramiko 会话范围
Paramiko session scope
我对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', ...)
这两种方法有什么区别吗?
提前致谢。
使用 Paramiko 或任何其他方式打开 SSH 连接,对您的数据库连接、任何其他连接、文件访问或命令执行都没有任何影响。所以你的第一个代码没有机会做你想做的事。
你想通过 SSH 连接做的一切,你需要通过 Paramiko API。
这就是 open_tunnel
在内部所做的。
有关等效的独立代码,请参阅 Paramiko forward.py
demo 中的 forward_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', ...)
这两种方法有什么区别吗?
提前致谢。
使用 Paramiko 或任何其他方式打开 SSH 连接,对您的数据库连接、任何其他连接、文件访问或命令执行都没有任何影响。所以你的第一个代码没有机会做你想做的事。
你想通过 SSH 连接做的一切,你需要通过 Paramiko API。
这就是 open_tunnel
在内部所做的。
有关等效的独立代码,请参阅 Paramiko forward.py
demo 中的 forward_tunnel
函数。