
Paramiko 不支持直接解析 OpenSSH 命令行语法(如 ssh user@host -p55555),需显式将 -p 后的端口号作为 port= 参数传入 connect() 方法,而非拼入主机名。
paramiko 不支持直接解析 openssh 命令行语法(如 ssh user@host -p55555),需显式将 -p 后的端口号作为 port= 参数传入 connect() 方法,而非拼入主机名。
在使用 Paramiko 建立 SSH 连接时,常见的误区是将 OpenSSH 命令中的 -p55555 错误地当作主机名的一部分(例如 'XXX.XXX.XXX.XXX -p55555'),这会导致连接失败——因为 Paramiko 并不解析类似 shell 的命令行选项,它只接受结构化参数。
正确的做法是:将主机地址、端口、用户名和密码(或密钥)分别传入 connect() 方法。其中,-p55555 对应的是 port=55555 参数,必须独立指定,且类型为整数:
import paramiko
ssh = paramiko.SSHClient()
# 自动添加未知主机密钥(仅用于测试环境;生产环境建议使用更安全的策略)
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect(
hostname='XXX.XXX.XXX.XXX', # 仅 IP 或域名,不含任何选项
port=55555, # 显式指定端口,int 类型
username='ID',
password='your_password' # 或使用 key_filename='/path/to/id_rsa'
)
print("SSH 连接成功")
# 示例:执行远程命令
stdin, stdout, stderr = ssh.exec_command('uname -a')
print(stdout.read().decode())
finally:
ssh.close() # 确保连接被释放⚠️ 注意事项:
-
port参数必须是整数(如55555),不能是字符串'55555'; - 若使用密钥认证,请替换
password=为key_filename='/path/to/private_key',并确保私钥权限为600; -
set_missing_host_key_policy()在生产环境中应避免使用AutoAddPolicy(),推荐结合paramiko.RejectPolicy()或自定义验证逻辑以增强安全性; - 连接异常(如认证失败、端口拒绝、超时)应通过
try/except捕获paramiko.AuthenticationException、paramiko.SSHException和socket.timeout等具体异常类型,便于调试与容错。
总结:Paramiko 是一个底层 SSH 协议实现库,它要求开发者显式传递连接参数,而非复用 OpenSSH 命令行语法。理解 -p 选项与 port= 参数的映射关系,是正确建立连接的关键一步。

















