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

Python3使用subprocess运行SSH连接网络设备RSA密钥提示处理问题

问题根因

ssh 程序默认会自动检测运行环境是否为交互终端(TTY),如果检测到标准输入/输出未绑定到终端,就不会弹出 RSA 密钥确认的交互提示,直接终止运行。你当前的 subprocess 调用没有显式绑定终端流,触发了 ssh 的非交互逻辑。

解决方法

方法1:显式绑定终端流(推荐,支持人工交互输入yes)

修改 subprocess.run 参数,将标准输入、输出、错误流都继承当前 Python 进程的终端,即可正常弹出交互提示:

import subprocess
import sys

subprocess.run(
    ['ssh', f'{v_user}@{v_ip}'],
    stdin=sys.stdin,
    stdout=sys.stdout,
    stderr=sys.stderr,
    text=True
)

操作完成后,RSA 密钥会自动保存到当前用户的 ~/.ssh/known_hosts 文件,后续连接同设备不会重复弹出提示。

方法2:自动接受新设备密钥(仅内网测试环境使用)

如果不需要人工校验密钥指纹,可以给 ssh 增加参数自动信任首次连接的新设备密钥,无需手动输入yes:

import subprocess

subprocess.run(
    ['ssh', '-o', 'StrictHostKeyChecking=accept-new', f'{v_user}@{v_ip}']
)

风险提示:该配置会跳过密钥指纹人工校验环节,存在中间人攻击风险,禁止在公网或不可信网络环境使用。

兼容旧版ssh的处理

如果运行环境的 ssh 版本较低不支持 accept-new 参数,可临时使用关闭主机密钥校验的参数(风险更高,仅临时测试使用):

subprocess.run(
    ['ssh', '-o', 'StrictHostKeyChecking=no', f'{v_user}@{v_ip}']
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 02:54:05