在shell脚本中,我需要在运行ssh-add
时自动填写密码。
我遇到expect
并试过这个剧本,但没有运气:
expect -c "spawn ssh-add; expect -re \".*passphrase.*\"; send \"mypass\r\n\";"
脚本不会抛出任何错误,但是当它ssh时会询问密码(意味着它不起作用)。
编辑:如果运行ssh-add
并手动添加密码,则按预期工作。
答案 0 :(得分:1)
这是一种更好的自动化方式。
创建一个脚本(例如带有可执行标志的ps.sh
),用于打印您的密码,例如:
#!/bin/sh
echo 'my_passphrase'
然后通过SSH_ASKPASS
变量指定此脚本,以便它可用于身份验证,例如:
$ cat id_rsa | SSH_ASKPASS=./ps.sh ssh-add -
另一种方法是使用named pipe:
$ mkfifo -m=600 ~/.fifo
$ cat id_rsa > ~/.fifo | SSH_ASKPASS=./ps.sh ssh-add ~/.fifo
您可以在SSH_ASKPASS
中详细了解man ssh-add
:
如果
ssh-add
没有与之关联的终端,但设置了DISPLAY
和SSH_ASKPASS
,则会执行SSH_ASKPASS
指定的程序。
答案 1 :(得分:-1)
如果您使用expect
来传递密码,则意味着您需要将密码存储在密钥宽度的某处 - 同一用户都可以读取。这根本不会增强安全性,因为能够访问密钥的攻击者可以同时访问密码。
只需使用没有密码的密钥。