Skip to main content
 首页 » 编程设计

python之Paramiko ssh_config 参数

2025年05月04日8duanxz

我将 python 与 paramiko(包装在 pysftp 中)一起使用,似乎存在一个问题,如果它无法在 ssh 期间进行身份验证,它将挂起很长时间。我想不出一种方法来设置连接超时,我在很多机器上循环,所以一台可以 ping 的机器,但不是 ssh'able(也无法通过 cmdline ssh 到达)挂起所有东西.使用这个:

ssh -o ServerAliveInterval=1 -o ServerAliveCountMax=1 <host> 

我至少可以让它在 1 秒后出错,而无需等待很长时间让 paramiko 中的身份验证消失并引发异常。但是,我不知道如何将这些 ssh_config 选项传递给 paramiko(或者更好的是对连接应用超时)。我尝试使用 SSHConfig 模块并读取配置文件,但它似乎没有在任何地方应用数据,似乎更多地用于主机别名。

任何帮助将不胜感激,我已经搜索了很多小时的信息/帮助。

请您参考如下方法:

使用具有指定套接字超时的 SSHClient.connect() 建立初始连接,然后使用其传输创建一个 SFTPClient。

连接成功

>>> import paramiko 
>>> client = paramiko.SSHClient() 
>>> client.load_system_host_keys() 
>>> client.connect(hostname='localhost', port=22, username='user', password='****', timeout=5.0) 
>>> sftp = paramiko.SFTPClient.from_transport(client.get_transport()) 
>>> dirlist = sftp.listdir('.') 

连接超时

>>> import paramiko 
>>> client = paramiko.SSHClient() 
>>> client.load_system_host_keys() 
>>> client.connect(hostname='slowhost', username='user', password='****', timeout=1.0) 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
  File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 296, in connect 
    sock.connect(addr) 
  File "/usr/lib64/python2.7/socket.py", line 222, in meth 
    return getattr(self._sock,name)(*args) 
socket.timeout: timed out