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

Tob*_*oby 1 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
Run Code Online (Sandbox Code Playgroud)

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

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

小智 5

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

    ERROR [sshtunnel.SSHTunnelForwarder:1233][MainThread] Password is required for key  
Run Code Online (Sandbox Code Playgroud)

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

这是您更新的代码:

from sshtunnel import SSHTunnelForwarder
import paramiko

with SSHTunnelForwarder(
    (proxyhost, 22),
    ssh_username=ssh_username,
    ssh_pkey=paramiko.agent.Agent().get_keys(),
    remote_bind_address=('127.0.0.1', 3306),
) as tunnel:
    pass
Run Code Online (Sandbox Code Playgroud)