如何在 ~/.ssh/config 中使用 Paramiko 和主机定义?

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

对于我的 SSH 连接,我使用这个

~/.ssh/config
:

Host gwhost
Hostname gw.hostname.com
User user
IdentityFile /home/user/.ssh/priv_key
ControlMaster auto
ControlPath ~/.ssh/%h-%p-%r.sock
ControlPersist 120

Host *.my-example.com
User user
IdentityFile /home/user/.ssh/priv_key
StrictHostKeyChecking no
ProxyCommand ssh -q 'gwhost' -W %h:22

从终端我可以像这样连接到主机:

ssh one.my-example.com

我想使用 Paramiko 在远程主机上执行一些命令。 我尝试这样做:

host = 'one.my-example.com'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
user_config_file = os.path.expanduser("~/.ssh/config")
config = SSHConfig.from_path(user_config_file)

ssh.connect(hostname=host)
stdin, stdout, stderr = ssh.exec_command('ls')
lines = stdout.readlines()
print(lines)

启动后出现此错误

in <lambda>
    retry_on_signal(lambda: sock.connect(addr))
TimeoutError: [Errno 110] Connection timed out

那么我该如何使用

~/.ssh/config
或者也许我不应该使用
~/.ssh/config

python linux ssh paramiko
1个回答
2
投票

Paramiko 对 OpenSSH ssh_config

 配置文件
的支持非常有限。

它绝对不会像 OpenSSH

ssh_config

 那样自动使用 
ssh

您必须使用

SSHConfig
实例化
SSHConfig.from_path
类。然后使用
SSHConfig.lookup
 查找主机名的配置。然后使用返回的字典来提供 
SSHClient.connect
 的参数。


强制性警告:请勿使用 AutoAddPolicy

 – 这样做您将失去针对 
MITM 攻击的保护。正确的解决方案请参阅Paramiko“未知服务器”

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