我正在使用ssh-keygen
(OpenSSH v8.9) 在无头服务器上自动生成密钥。如果不需要密码,这很简单,但如果确实需要密码,则变得困难。ssh-keygen
生成新密钥时,在 stdin 上需要 3 项内容:y
,因为密钥文件已经存在,以及所需的密码,重复两次。
经过一些简化,我这样做如下:
$ printf -v input "y\npassword\npassword\n"
$ echo -n "$input"
y
password
password
$ echo -n "$input" | ssh-keygen -t ed25519 -a100 -f tmpkey
当我最初这样做时,我得到了这个输出:
Generating public/private ed25519 key pair.
tmpkey already exists.
Overwrite (y/n)? ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory
密钥对已创建,但私钥未加密。因此,我ssh-askpass
在装有 X 的测试系统上安装了ssh-keygen
。现在运行时,我得到了一个 OpenSSH 身份验证弹出窗口,并且 stdin 现在被忽略了。显然,即使我想要,也无法在无头服务器上使用图形弹出窗口。
那么到底发生了什么?我可以说服ssh-keygen
自动输入密码吗?如果不行,我是否可以用来openssl
添加密码,甚至创建文件?我确实想从中获取 OpenSSH 格式的密钥 - 我已经使用 openssl 自动化了 PKCS#8。
编辑
我找到了(not )SSH_ASKPASS_REQUIRE
的环境变量。如果我将其设置为“never”,它确实会停止弹出窗口,但现在只会读取 stdin 的第一行,并忽略接下来两行的密码。所以,它对我没有任何帮助。ssh
ssh-keygen
ssh-askpass
ssh-keygen