从 FIFO 加载 RSA 密钥时如何强制 ssh-add 询问密码?

从 FIFO 加载 RSA 密钥时如何强制 ssh-add 询问密码?

我创建了以下 RSA 密钥(带有密码):

ssh-keygen -t rsa -f rsa_foo

现在,当以正常方式添加密钥时,ssh-add会要求输入密码:

$ ssh-add rsa_foo
Enter passphrase for rsa_foo: 12345

但是,当我通过 FIFO 加载密钥时,它不再询问:

$ mkfifo -m=600 fifo
$ cat rsa_foo >fifo | ssh-add fifo

它给了我以下错误:

  • 操作系统:

    ssh_askpass: exec(/usr/libexec/ssh-askpass): 没有这样的文件或目录

  • Linux(Ubuntu):

    ssh_askpass: exec(/usr/bin/ssh-askpass): 没有这样的文件或目录

当 RSA 密钥文件没有密码短语时,此方法有效。

如何按顺序修复上述错误,以便ssh-add可以正常询问密码(或者我可以以某种方式传递给它)?

我的目标是使用 FIFO 加载此 RSA 密钥。

答案1

它确实要求我输入密码:

$ ls -l fifo
prw------- 1 glopes users 0 Out 11 03:59 fifo
$ ssh-add fifo
Enter passphrase for fifo:

然后从另一个终端加载密钥:

$ cat id_rsa > fifo

或者尝试以下单行:

$ (cat id_rsa > fifo &); ssh-add fifo

就在终端上,无需调用$SSH_ASKPASS,如手册所述:

如果 ssh-add 需要密码,如果从终端运行,它将从当前终端读取密码。如果 ssh-add 没有与之关联的终端,但DISPLAYSSH_ASKPASS设置,它将执行(默认为“ssh-askpass)”指定的程序,SSH_ASKPASS并打开 X11 窗口来读取密码。

您始终可以通过在将密钥传递给 ssh-add 之前显式解密密钥来解决此问题。

相关内容