
Paramiko 不支持直接解析 OpenSSH 命令行语法(如 -p55555),需显式通过 port= 参数传入端口号,而非将其拼接在主机名中。
paramiko 不支持直接解析 openssh 命令行语法(如 `-p55555`),需显式通过 `port=` 参数传入端口号,而非将其拼接在主机名中。
在使用 Paramiko 建立 SSH 连接时,常见的误区是将 OpenSSH 命令(如 ssh user@host -p55555)中的 -p 选项错误地理解为“主机名的一部分”,进而尝试将 -p55555 直接写入 hostname 字段(例如 'XXX.XXX.XXX.XXX-p55555'),这会导致连接失败或抛出 socket.gaierror(地址解析错误)。
正确做法是:将主机地址、端口、用户名和认证凭据分别传入 ssh.connect() 方法的对应参数,其中端口号通过 port= 显式指定(类型为 int),而非字符串拼接。
以下是一个完整、可运行的连接示例:
import paramiko
# 创建 SSH 客户端实例
ssh = paramiko.SSHClient()
# 自动添加未知主机密钥(仅用于测试环境;生产环境建议手动验证)
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
# 正确方式:端口作为独立参数传入(整数类型!)
ssh.connect(
hostname='XXX.XXX.XXX.XXX', # 仅 IP 或域名,不含端口或 flag
port=55555, # 端口号必须是 int,不能是字符串 '55555' 或 '-p55555'
username='ID',
password='your_password' # 或使用 key_filename='/path/to/id_rsa' 进行密钥认证
)
print("✅ SSH 连接成功")
# 示例:执行简单命令
stdin, stdout, stderr = ssh.exec_command('uname -a')
print("Remote OS:", stdout.read().decode().strip())
finally:
ssh.close() # 确保连接被释放⚠️ 注意事项:
-
port参数必须为整数(如55555),传入字符串(如'55555')会引发TypeError; - 若使用私钥登录,请替换
password=为key_filename='/path/to/private_key',并确保权限为600; - 生产环境中应避免使用
AutoAddPolicy(),推荐配合paramiko.WarningPolicy()或自定义 HostKey 验证逻辑以提升安全性; - Paramiko 不解析 OpenSSH 配置文件或命令行标志(如
-o StrictHostKeyChecking=no),所有配置需在代码中显式声明。
掌握这一基本范式后,即可灵活适配任意非标准 SSH 端口(如 Docker 容器暴露的 2222、云主机安全组限制的 22222 等),实现稳定可靠的自动化运维连接。

















