You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python subprocess创建SSH密钥时需输入密码短语的问题

解决subprocess执行ssh-keygen生成密钥后仍提示输入密码短语的问题

问题根源在于你通过字符串拼接再split的方式传递参数,导致-N ""被拆分为-N和""两个参数——ssh-keygen会把带双引号的空字符串当成实际的密码短语(密码就是一对双引号),所以后续连接时会要求输入这个密码。

正确实现方式

直接构造subprocess的参数列表,无需给空字符串加引号,让-N的参数直接为空字符串:

from pathlib import Path
import subprocess

LOCAL_SSH_KEY_FOLDER = Path().home() / ".ssh"
# 直接构造参数列表,避免字符串拆分的边界问题
command_args = [
    "ssh-keygen",
    "-f", str(LOCAL_SSH_KEY_FOLDER / "id_rsa"),
    "-t", "rsa",
    "-N", ""  # 直接传递空字符串,无需加引号
]
p = subprocess.Popen(command_args, stdout=subprocess.PIPE, 
                     stderr=subprocess.PIPE, text=True)
result, errors = p.communicate()

# 可选:检查命令执行是否出错
if errors:
    print(f"密钥生成失败: {errors}")

优化建议

可以添加-q参数让ssh-keygen静默执行,避免输出多余的提示信息:

command_args = [
    "ssh-keygen",
    "-q",  # 静默模式,无额外输出
    "-f", str(LOCAL_SSH_KEY_FOLDER / "id_rsa"),
    "-t", "rsa",
    "-N", ""
]

内容的提问来源于stack exchange,提问作者Amir Zare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 10:17:10