使用xclip

使用xclip

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

其他想法

以下是我没有测试或设法使其工作的内容:

  • 您可以使用screentmux,它有一些方法可以将密钥发送到正在运行的会话......

  • 您可以使用一些命令来发送密钥,这对xclip上述方法可能很有用。sendkeygithubxdotool浮现在脑海中。

相关内容