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

Paramiko SSHClient.connect返回False,无法建立SSH连接求助

问题分析与解决

核心错误:错误判断connect()的返回值

Paramiko的SSHClient.connect()方法没有返回布尔值:连接成功时它会返回None,连接失败时会直接抛出异常(比如AuthenticationException、SSHException等)。你用success != True判断时,None != True永远为真,所以不管连接成功与否都会输出"not connected",这是逻辑错误。

修正后的代码

结合主机密钥处理和异常捕获(这是网络设备SSH连接的常见必要步骤),正确的脚本应该是这样:

import paramiko
import sys

ssh = paramiko.SSHClient()
# 自动添加远程主机的密钥(避免因未知密钥导致连接失败)
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

try:
    # connect成功不会返回有效值,失败直接抛异常
    ssh.connect(
        hostname="172.16.0.1",
        username="admin",
        password="admin",
        timeout=10  # 添加超时,避免无限等待
    )
    print("connected")
    # 这里可以添加执行命令的逻辑,比如:
    # stdin, stdout, stderr = ssh.exec_command("show version")
    # print(stdout.read().decode())
except paramiko.AuthenticationException:
    print("认证失败:用户名或密码错误")
    sys.exit(1)
except paramiko.SSHException as e:
    print(f"SSH连接错误:{str(e)}")
    sys.exit(1)
except Exception as e:
    print(f"其他错误:{str(e)}")
    sys.exit(1)
finally:
    # 确保关闭连接
    ssh.close()

额外排查点(针对cmd/PuTTY能连但Python不行的情况)

  • 加密算法兼容问题:部分老旧路由器只支持弱加密算法,而新版Paramiko默认禁用了这些算法。可以手动指定允许的算法:
    在connect()中添加参数:
    disabled_algorithms={'pubkeys': ['rsa-sha2-256', 'rsa-sha2-512']}
    
    或者根据设备支持的算法调整这个参数。
  • 端口问题:如果路由器SSH端口不是默认的22,需要在connect()中指定port参数,比如port=2222。
  • 超时设置:原代码没有超时,可能因网络延迟导致看似无输出,添加timeout参数可以快速反馈问题。

内容的提问来源于stack exchange,提问作者Karam Zoher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:26:05