我设置了无密码 ssh(keygen)来从我的个人笔记本电脑访问我的远程工作空间。在远程服务器上,我确实使用带有密码的帐户进行连接。设置公钥/私钥身份验证使我无需输入此密码即可进行连接。
我正在运行的 Python 脚本用于subprocess.Popen()
再次 ssh 进入此远程工作区。不过,这期间并不是无密码的 ssh。我已检查我的权限并尝试删除并重新创建密钥,但这种情况仍然发生。
下面是相关的Python代码。
subprocess.Popen(['ssh', machine_addr, 'cd ' + workspace + \ '; python dispynode.py --serve 1 --clean --dest_path_prefix dispytmp_' + str(i)])
答案1
我知道这个问题已经在 4 年前被问过,但我遇到了同样的问题,并找到了对我有用的解释和解决方案,所以这可能对处于相同情况的其他人有帮助。
语境
和你一样,我生成并在我的客户端(Raspberry Pi)和我的服务器之间共享 ssh 密钥。我能够通过 ssh 连接,而无需运行密码提示ssh user@server
。但是当我的 Python 脚本尝试连接 时subprocess.Popen
,它要求输入密码。
解释
问题是我使用 sudo 运行我的 Python 脚本,因为出于某些原因我需要这样做。
因此,ssh 命令运行时subprocess.Popen
使用位于 的 ssh 密钥/root/.ssh/id_rsa
,而生成并与服务器共享的密钥位于/home/user/.ssh/id_rsa
。
解决方案
将正确的标识文件作为参数添加到 ssh 命令:
ssh -i /home/user/.ssh/id_rsa user@server
所以您需要的 Python 行如下:
subprocess.Popen(['ssh', '-i', '/home/user/.ssh/id_rsa', 'user@server']
您可以在其中添加所需的命令(cd、mkdir 等)。
希望这可以帮助 !