Shell

從 FIFO 載入 RSA 密鑰時如何強制 ssh-add 詢問密碼?

  • October 11, 2015

我創建了以下 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 密鑰。

它確實要求我輸入密碼:

$ 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 之前顯式解密密鑰來解決它。

引用自:https://unix.stackexchange.com/questions/235309