You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dockerpy SDK连接远程Ubuntu服务器遇SSH密钥问题求助

解决dockerpy连接远程Docker的SSH密钥问题

方法1:通过paramiko_kwargs传递私钥密码

当使用加密私钥时,无需依赖系统SSH客户端,直接给paramiko传递私钥文件路径和密码即可实现自动化认证:

from docker import APIClient

client = APIClient(
    base_url="ssh://user@your-server-ip",
    paramiko_kwargs={
        "key_filename": "/本地路径/到/私钥文件",  # 示例:~/.ssh/id_rsa
        "password": "你的私钥加密密码"
    }
)

方法2:用ssh-agent缓存私钥密码

如果不想在代码里硬编码密码,可以借助ssh-agent临时缓存私钥密码,后续连接无需手动输入:

  1. 本地启动ssh-agent:
eval $(ssh-agent -s)
  1. 添加加密私钥到agent(仅需输入一次密码):
ssh-add /本地路径/到/私钥文件
  1. 代码中使用系统SSH客户端连接:
from docker import APIClient

client = APIClient(base_url="ssh://user@your-server-ip", use_ssh_client=True)

方法3:使用无密码SSH密钥(适合可信环境)

若环境安全可控,可生成无密码SSH密钥彻底避免密码输入:

  1. 生成无密码私钥:
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa_no_pass
  1. 将公钥复制到远程服务器的~/.ssh/authorized_keys文件:
ssh-copy-id -i ~/.ssh/id_rsa_no_pass.pub user@your-server-ip
  1. 代码连接(两种方式任选其一):
# 方式一:基于paramiko
client = APIClient(
    base_url="ssh://user@your-server-ip",
    paramiko_kwargs={"key_filename": "~/.ssh/id_rsa_no_pass"}
)

# 方式二:基于系统SSH客户端
client = APIClient(base_url="ssh://user@your-server-ip", use_ssh_client=True)

注意:不要尝试在base_url中嵌入私钥密码,dockerpy的SSH URL格式不支持这种写法,这也是你遇到Invalid bind address format错误的原因。

内容的提问来源于stack exchange,提问作者jaal kamza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:15:17