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

使用subprocess模块访问无密码SSH设备时遇密码提示问题求助

解决Python调用SSH需要输入密码的问题

嗨,我来帮你捋捋这个问题~明明终端里ssh host@xxx.xxx.x.xx能无密码登录,为啥Python脚本调用就不行?大概率是这几个原因,咱一个个排查:

1. Python进程找不到你的SSH密钥文件

终端里运行SSH时,它会默认读取你用户目录下的~/.ssh/id_rsa(或者你生成的密钥文件名),但Python脚本运行时,可能因为环境变量不一致(比如HOME路径不对),或者运行脚本的用户和你终端登录的用户不是同一个,导致SSH找不到密钥。

解决办法:在ssh命令里手动指定密钥文件路径,比如:

from subprocess import call
call(['ssh', '-i', '/home/你的用户名/.ssh/id_rsa', 'host@xxx.xxx.x.xx'])

把/home/你的用户名/.ssh/id_rsa替换成你实际的密钥文件路径就行。

2. SSH密钥文件的权限不符合要求

SSH对密钥文件的权限要求特别严格:

  • 密钥文件(比如id_rsa)必须是600权限(只有所有者可读可写)
  • .ssh目录必须是700权限(只有所有者能访问)

如果权限太松,SSH会直接拒绝使用这个密钥,哪怕它是正确的。你可以在终端里执行这两个命令修正权限:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa

3. 未加载SSH配置文件

如果你在~/.ssh/config里给这个树莓派主机配置了别名、指定了密钥路径等,Python调用SSH时可能没加载这个配置文件。可以试试在命令里手动指定配置文件:

call(['ssh', '-F', '/home/你的用户名/.ssh/config', 'host@xxx.xxx.x.xx'])

4. 开启调试日志排查问题

要是上面的方法都不行,你可以让SSH输出详细的调试日志,看看连接过程中到底哪里出了问题:

call(['ssh', '-v', 'host@xxx.xxx.x.xx'])

运行后会打印一堆日志,你可以重点看关于“加载密钥”“尝试认证”的部分,就能找到具体原因啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:00:52