ssh-add
我正在尝试编写一个脚本,在 Arch Linux 上自动解锁我的所有 rsa 密钥。
我用来pass
存储我的密码(使用 gpg 密钥加密),并且我尝试将其输入传递给ssh-add
以下内容:
rsa_dir=~/.ssh
cd $rsa_dir
ls -1 id_rsa* |
grep -v '.pub' |
while read file; do
# example: file == id_rsa_github -> keyname == rsa/github
key_name=${file/id_rsa_/rsa/}
# pass will prompt (only once) for the master password, then print out the request password to stdout
pass $key_name | ssh-add $file
done
但是,它给出了一个错误:
ssh_askpass: exec(/usr/lib/ssh/ssh-askpass): No such file or directory
但如果我只是运行ssh-add $file
,它会提示输入密码并且工作正常。我不想使用默认的 ssh-askpass 来获取密码。我需要使用我自己的脚本。
有人可以帮帮我吗?
答案1
我和你的情况一样,所以我找到了两种方法来做到这一点:
使用xclip
pass yourpassword | xclip -selection clipboard ; ssh-add yourprivatekey
然后您只需使用通常用来粘贴密码的任何密钥即可。请记住,这使用剪贴板,因此如果您不是唯一的用户/如果您位于不受信任的网络上,第三方可能会注意到您的密码...
使用期望
PASS=`pass yourpassword`
/usr/bin/expect <<EOF
set timeout -1
spawn ssh-add privatekey
match_max 100000
expect -exact "Enter passphrase for ~/.ssh/privatekey: "
send -- "$PASS\r"
expect eof
EOF
应该管用。请随意更改上面的私钥路径,或者在必须生成某种工作脚本autoexpect
的脚本上使用...ssh-add yourprivatekey
其他想法
以下是我没有测试或设法使其工作的内容:
您可以使用
screen
或tmux
,它有一些方法可以将密钥发送到正在运行的会话......您可以使用一些命令来发送密钥,这对
xclip
上述方法可能很有用。sendkey
在github并xdotool
浮现在脑海中。