Docker APIClient:来自 ssh/config 的端口

问题描述 投票:0回答:1

假设我有一个远程服务器[电子邮件受保护]:1234。在我的 ~/.ssh/config 中我有这个:

remote_server:
HostName: 10.10.10.10
User: admin
Port: 1234

我尝试与 Docker APIClient 建立连接:

docker.APIClient('ssh://remote_server')

但它尝试连接到端口 22 而不是 1234。它成功解析主机名和用户,但没有考虑配置文件中的端口。有人知道原因吗?有可能修复它吗?解决方法就像

docker.APIClient('ssh://remote_server:1234')

对我来说不太好。我希望能够仅使用配置中的占位符。

docker ssh
1个回答
0
投票

好的,我找到了原因,为什么会发生这种情况。当传递给 APIClient 的 url 以“ssh://”开头时,将调用 SSHHTTPAdapter。这个类有一个方法_create_paramiko_client,它解析“~/.ssh/config”。并将此配置中的一些参数添加到字典 self.ssh_params 中。关于端口,有这样的说法:

if base_url.port is None and 'port' in host_config:

但是base_url.port默认是22,所以它永远不是None。这就是配置文件中的这条记录被忽略的原因。因此,解决方案可能是对方法 _create_paramiko_client 进行猴子修补,就像出于类似目的而建议的那样here

© www.soinside.com 2019 - 2024. All rights reserved.