为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕侠2389804 2021-10-12 15:05:31
我正在尝试使用 sshtunnel 创建到服务器的隧道。我正在使用 ssh 密钥和 ssh 代理:from sshtunnel import SSHTunnelForwarderwith 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 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

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


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

通过导入 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


查看完整回答
反对 回复 2021-10-12
  • 1 回答
  • 0 关注
  • 263 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信