使用 python 中的子进程创建 SSH 密钥时要求输入密码

问题描述 投票:0回答:1

我有一个 python 项目,应该用于使用 ssh-keygen 创建 SSH 密钥并将其添加到一些远程服务器。当我从命令行运行命令

ssh-keygen -f .ssh/id_rsa -t rsa -N ""
时,一切正常,我只需运行其余的 python 代码即可将密钥传输到远程服务器。之后,可以使用密钥成功建立 SSH 连接,无论是从 python 中的 paramiko 或从命令行。

但是,当我运行相同的命令使用 python 中的子进程库创建密钥时,我无法使用该密钥进行连接,因为它会提示输入密码,例如

Enter passphrase for key 'C:\Users\<my_user>/.ssh/id_rsa':
。我用于构建 SSH 密钥的 python 代码如下:

from pathlib import Path
import subprocess

LOCAL_SSH_KEY_FOLDER = Path().home() / ".ssh"
command = f'-f {LOCAL_SSH_KEY_FOLDER}/id_rsa -t rsa -N ""'
p = subprocess.Popen(["ssh-keygen"] + command.split(' '), stdout=subprocess.PIPE, 
                     stderr=subprocess.PIPE, text=True)
result, errors = p.communicate()

使其工作的一种方法是删除

N ""
部分并要求 python 代码用户输入一个空密码。它有效,但我不希望系统提示我的用户输入此密码。

python ssh subprocess ssh-keygen
1个回答
0
投票

感谢@Kenster,我发现当我执行原始Python脚本时,SSH密钥密码被设置为“”(两个双引号),而不是空。解决方案是使用以下行更改代码中的命令参数,问题就消失了。

f'-f {LOCAL_SSH_KEY_FOLDER}/id_rsa -t rsa -N '
© www.soinside.com 2019 - 2024. All rights reserved.