使用 subprocess 模块访问无密码 SSH 设备

Posted

技术标签:

【中文标题】使用 subprocess 模块访问无密码 SSH 设备【英文标题】:Using subprocess module to access passwordless SSH device 【发布时间】:2018-11-08 15:47:33 【问题描述】:

我正在尝试构建一个 GUI,用于通过 SSH 监视 Raspberry Pi 上正在进行的一些进程。

Pi 目前有一个无密码设置(我之前使用过 keygen 来生成密码文件)——我可以简单地输入

ssh host@xxx.xxx.x.xx

进入终端无需密码即可访问。

我现在正在尝试编写 Python 脚本来访问设备,但在尝试运行时提示输入密码

from subprocess import call
call(['ssh', 'host@xxx.xxx.x.xx'])

我也尝试过 os 模块,但无济于事。我有什么遗漏吗?

(抱歉,如果之前已经回答过这个问题。我找不到任何相同的东西,而且我的编程技能相当差)

【问题讨论】:

只想说您的 python 代码可以完美运行,通过 ssh 密钥访问 ssh 没有任何问题。如果它不起作用,那不是因为子进程调用。 为输入干杯!我实际上意识到我已经启用了 ***,所以这就是问题所在——我已经使用了下面 Aif 的 paramiko 建议并且一切正常 【参考方案1】:

这是因为您的终端运行一个知道您的 ssh 身份的 ssh-agent。而您的 python 脚本必须有一个空白环境,因此无法访问您的 ssh-agent

此外,您可以依赖诸如 paramiko 之类的库。我找到了一个example using ssh keys 或这个SO answser。

【讨论】:

有没有办法将 Python 脚本指向 ssh-agent 的位置? 您可以尝试增加 ssh 调用的详细程度(例如 -v 或 -vv)。然后您可以使用env 获取环境变量列表并检查您的python 是否有SSH_AUTH_SOCK 条目。 我意识到我可能超出了我的能力范围,所以我最好恢复密码系统。谢谢!

以上是关于使用 subprocess 模块访问无密码 SSH 设备的主要内容,如果未能解决你的问题,请参考以下文章

配置Linux主机SSH无密码访问

linux之ssh无密码访问

模拟ssh, hashlib模块, struct模块, subprocess模块

ssh的两种连接方法(包括无密码访问)

ssh 的参数 -o + 检查是否是无密码访问

模拟ssh黏包hashlib模块