使用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
相关产品推荐
相关产品推荐

