我已经配置了远程 ssh 服务器,以便通过公钥-私钥对(仅)登录。我可以使用 ssh 登录服务器并运行命令:
ssh [email protected] -i ~/.ssh/my_key echo fu
我想使用parallel-ssh
frompssh
包向服务器发送命令。我使用-H
选项指定服务器列表(一个服务器),-i
在屏幕上打印结果,-A
这样程序就会要求输入密钥的密码。文档指出它能够使用-x
或将参数传递给 ssh -X
。但是,以下命令都不起作用:
parallel-ssh -A -i -H "[email protected]" -X "-i ~/.ssh/my_key" 'echo fu'
输出为:
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 17:03:35 [FAILURE] [email protected] Exited with error code 255
Stderr: Warning: Identity file ~/.ssh/my_key not accessible: No such file or directory.
Permission denied (publickey).
(我可以使用 来查看该文件ll ~/.ssh/my_key
。)
此命令也不会成功:
parallel-ssh -A -i -H "[email protected]" -x '-i ~/.ssh/my_key' 'echo fu'
输出:
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 17:15:06 [FAILURE] [email protected] Exited with error code 255
Stderr: Enter passphrase for key '/home/local_user/.ssh/my_key':
Permission denied (publickey).
第二个完全是奇怪的,因为man parallel-ssh
声称-A
选项确实“提示输入密码并将其传递给 ssh。密码可以用于解锁钥匙或用于密码验证。”
那么,如何在parallel-ssh
命令中使用受密码保护的公钥?
答案1
这是一个错误在pssh
程序中,它只是一组 Python 脚本。这些脚本依靠解析ssh
程序输出来与其交互。
让它发挥作用的一种方法是自己修复.
dpkg -L pssh
将列出随包安装的所有文件pssh
。
askpass_client.py
是需要修改的文件。第 67 行是
if not prompt.strip().lower().endswith('password:'):
应该是:
if not ( prompt.strip().lower().endswith('password:') or 'enter passphrase for key' in prompt.strip().lower()):
然后命令
parallel-ssh -A -i -H "[email protected]" -x "-i ~/.ssh/my_key" 'echo fu'
将工作。