我想加入关键ssh-agent
和希望ssh-add
使用文件读取密码。 如何其可能的?
如何自动从shell脚本这个过程?
我想加入关键ssh-agent
和希望ssh-add
使用文件读取密码。 如何其可能的?
如何自动从shell脚本这个过程?
根据您的分布和版本的ssh-添加您可能能够或不使用-p
SSH-添加的选项,以这种方式从标准输入读取密码:
cat passfile | ssh-add -p keyfile
如果不工作,你可以使用期望 ,一个Unix工具,使交互式应用程序是非交互式的。 你必须从你的包管理器安装。
你在期待我写了一个工具。 在名为SSH加通文件中的内容复制并在其上(设置可执行权限chmod +x ssh-add-pass
)。 你也可以将它复制到/ usr / bin中或/ usr / local / bin目录是从$ PATH搜索访问。
#!/bin/bash
if [ $# -ne 2 ] ; then
echo "Usage: ssh-add-pass keyfile passfile"
exit 1
fi
eval $(ssh-agent)
pass=$(cat $2)
expect << EOF
spawn ssh-add $1
expect "Enter passphrase"
send "$pass\r"
expect eof
EOF
用法很简单: ssh-add-pass keyfile passfile
下面是一些解决方法系统不支持-p
:
$ PASS="my_passphrase"
$ install -vm700 <(echo "echo $PASS") "$PWD/ps.sh"
$ cat id_rsa | SSH_ASKPASS="$PWD/ps.sh" ssh-add - && rm -v "$PWD/ps.sh"
其中ps.sh
基本上是你的脚本打印您的密码。 请参阅: man ssh-add
。
为了使它更安全(不保持在同一个文件),使用mktemp
生成一个随机的私人文件,使其可执行( chmod
),并确保它打印密码到标准输出执行一次。
类似于kenorb答案,但不保存秘密档案:
$ SSH_ASKPASS=/path/to/ssh_give_pass.sh ssh-add $KEYFILE <<< "$KEYPASS"
其中ssh_give_pass.sh是:
#!/bin/bash
# Parameter $1 passed to the script is the prompt text
# READ Secret from STDIN and echo it
read SECRET
echo $SECRET
如果你有在$ KEYPASSFILE秘密,它读入一个变量先用
KEYPASS=`cat $KEYPASSFILE`
另外,还要确保ssh_give_pass.sh不被未经授权的用户可编辑的 - 这将是很容易通过登录脚本通过了所有的秘密。