如何回答 Python 的 ssh-keygen 密码提示?
Posted
技术标签:
【中文标题】如何回答 Python 的 ssh-keygen 密码提示?【英文标题】:How to answer the ssh-keygen passphrase prompt from Python? 【发布时间】:2020-02-01 16:38:31 【问题描述】:在 Python 中,我想通过命令 ssh-keygen -y -f
验证一对具有密码短语的公钥/私钥。代码如下,
#/usr/bin/env python3
...................
...................
command = "ssh-keygen -y -f ".format(key1)
args = bytes("%s\n%s\n" % (psw, psw), encoding='utf8')
proc = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
proc.communicate(input=args)
我认为subprocess.communicate(input=args)
可以用密码回答提示。
但我仍然收到密码提示。
欢迎任何cmets。
【问题讨论】:
那么你想“回答提示”如你的标题所说的那样吗?还是您想“避免提示”,正如您的问题正文所说的那样? @Martin Prikryl “回答提示”是最想要的。 @Martin Prikryl 你有回答密码提示的解决方案吗? @Martin Prikryl 我也是这样做的,但这不是我需要的。如果我使用command = "ssh-keygen -y -f -P \"\"".format(key1, passphrase)
,我可能会遇到密码为无的情况,那么command
将失败。因此,我需要一个解决方案来处理密码短语的提示,无论它是否存在。该解决方案必须处理三种情况, 1. 密码存在并且我将其输入到脚本中; 2. 密码不存在,我在脚本中输入 null; 3. 密码存在,我忘记在脚本中输入。
@Martin Prikryl 它已修复。我明白了。如果没有密码,我曾经在 -P 中输入一个空值,而不是双引号。因此,在“参数过多”之后出现异常,“Command 'ssh-keygen -y -q -P -f /tmp/tmp0ktbhszv/id_rsa' 返回非零退出状态 1”。
【参考方案1】:
ssh-keygen
有 -P
switch 提供密码:
command = "ssh-keygen -y -f -P \"\"".format(key1, passphrase)
当密钥未加密时,可以使用空密码 (-P ""
)。
如果您使用错误/空密码短语 (-P "wrong"
),对于加密密钥,ssh-keygen
将失败 - 它不会再次提示您输入正确的密码短语。
【讨论】:
以上是关于如何回答 Python 的 ssh-keygen 密码提示?的主要内容,如果未能解决你的问题,请参考以下文章
ssh-keygen - 如何使用特定用户名设置 rsa 密钥