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

