我创建了以下 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 没有与之关联的终端,但
DISPLAY
已SSH_ASKPASS
设置,它将执行(默认为“ssh-askpass)”指定的程序,SSH_ASKPASS
并打开 X11 窗口来读取密码。
您始终可以通过在将密钥传递给 ssh-add 之前显式解密密钥来解决此问题。