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
相关产品推荐
相关产品推荐

