无需输入密码的Paramiko或sshtunnel和ssh-agent

时间:2019-01-16 09:22:37

标签: python paramiko ssh-tunnel ssh-agent

我正在尝试使用sshtunnel创建到服务器的隧道。我正在使用ssh-key和ssh-agent:

from sshtunnel import SSHTunnelForwarder

with SSHTunnelForwarder(
    (proxyhost, 22),
    ssh_username=ssh_username,
    #ssh_private_key_password=PASSPHRASE, # with this line it works
    remote_bind_address=('127.0.0.1', 3306),
) as tunnel:
    pass

找到正确的私钥,当我输入密码作为参数时,便建立了隧道(请参见上面的注释行)。

但是我已经用ssh-agent解锁了ssh私钥(重新启动后,我第一次使用ssh时才要求输入ssh密码)。是否有可能让paramiko / sshtunnel在不提示输入密码的情况下获取解锁的私钥?我想避免将密码存储在磁盘上的任何位置。

1 个答案:

答案 0 :(得分:3)

我在遇到此问题时遇到麻烦,最后提出了解决方案。我试图使用Alembic来运行迁移,并且需要通过ssh隧道。如果SSHTunnel正在运行,SSHTunnel应该会访问您的代理,但是它也会产生如下错误:

JSON.stringify(e.target.dataset.day)

通过导入paramiko,然后使用paramiko.agent.Agent()。get_keys(),我能够访问macOS上的钥匙串中存储的加密密钥。

这是您更新的代码:

    ERROR [sshtunnel.SSHTunnelForwarder:1233][MainThread] Password is required for key