Answers:
将以下内容放在脚本顶部:
eval `ssh-agent`
您的脚本应如下所示:
#!/bin/bash
eval `ssh-agent`
ssh-add /path/to/key
...
...
说明
周围的反引号ssh-agent
收集其输出。eval
收集该输出,将其连接为单个命令,然后执行该命令。然后,您可以ssh-add
用来提供您的关键凭证。
eval $(ssh-agent)
bash -i
脚本放到最后之前,此解决方案对我不起作用。
我倾向于在需要代理的脚本中执行类似的操作。
#!/bin/bash
# if we can't find an agent, start one, and restart the script.
if [ -z "$SSH_AUTH_SOCK" ] ; then
exec ssh-agent bash -c "ssh-add ; $0"
exit
fi
... and so on.
基本上,脚本执行的第一件事是检查代理是否正在运行。如果不是,则exec用于代替脚本启动新进程。启动了代理,添加了密钥,最后再次调用了脚本(请参阅参考资料$0
)。
.. "ssh-add ; $0 $*"
或.. "ssh-add ; $0 $@"
替代,它可能会起作用。这不是完美的,但在许多情况下肯定可以工作。最好的解决方案几乎总是使您的代理先运行,这在晦涩的情况下可能很有用。
在这种情况下最好使用钥匙串
Debian / Ubuntu:
apt-get install keychain
RHEL / Fedora / CentOS
yum install keychain
在您的.bashrc中添加以下内容:
eval `keychain --eval id_rsa`
我已经尝试了很多,最终可行的解决方案是用空字符串替换密码短语。
ssh-keygen -p
exit
。