提问人:Dmitry Grekov 提问时间:11/15/2023 最后编辑:Dmitry Grekov 更新时间:11/16/2023 访问量:60
无法使用 python + sshtunnel 建立 SSH 隧道
Can't establish an SSH tunnel with python + sshtunnel
问:
我正在尝试使用以下代码建立到跳转服务器的 SHH 隧道:
import sshtunnel
server = sshtunnel.SSHTunnelForwarder(
('jump host', jump_port),
ssh_username = 'my_user_name',
ssh_pkey = '~/.ssh/id_rsa',
ssh_private_key_password = 'my private key pwd',
remote_bind_address = ('remote_host', remote_port),
local_bind_address = ('localhost', local_port)
)
但是反复出现错误:
| ERROR | Password is required for key C:\Users\<my_local_user_name>/.ssh\id_rsa
我已经检查了几个类似的问题并尝试了建议的解决方案,但还没有运气。
我确定我的 RSA 密钥文件和密码都是正确的。 我已经用以下代码检查了这一点:
import paramiko
pkey='C:/Users/<my_local_user_name>/.ssh/id_rsa'
key=paramiko.RSAKey.from_private_key_file(pkey, 'my private key pwd')
它工作并成功创建对象。key
我还检查了代码,并找到了触发此类错误消息的唯一位置:sshtunnel
据我了解,在 1304 行中对 的这个调用应该像我上面的直接调用一样工作得很好,但由于某些原因它触发了 here。pkey_class.from_private_key_file
paramiko.RSAKey.from_private_key_file
PasswordRequiredException
我还检查了 paramiko 源代码,发现只有在密钥文件加密且密码为 None 时才会引发此异常,我认为这不是我的情况,因为我正确指定了密码。
传球也无济于事。allow_agent = True
作为对象传递也无济于事。ssh_pkey
paramiko.RSAKey
所以现在我完全迷失了......
有什么想法吗?
PS:我通过 Jupiter Notebook 使用 Python 3,但纯 Python 3 也不起作用。
PPS:跳转服务器和公钥文件都没问题,因为我使用 DBeaver 通过这个跳转服务器成功连接到我的数据库
答:
您正在使用的库似乎有问题:https://pypi.org/project/sshtunnel/
尝试仅将其用作 CLI 工具。 在那里可以检查 ssh_key + 密码,如果这有效,那么您就有了解决方案。
如果问题仅与您当前的代码设置有关,我建议打开一个问题和库 github 位置。
评论