美好的一天,我整天都读过类似的话题,但很遗憾找不到适合自己情况的答案。 所以这就是我想要做的。 我有很多函数的shell脚本,其中一个函数假设调用ssh-agent:
sh_agent_run () { case "$(pidof ssh-agent | wc -w)" in 0) echo "SSH agent is not running. Startting SSH agent." eval `ssh-agent -s` ssh-add ${ssh_key} ;; 1) echo "SSH agent is running. Nothing to do." ;; *) echo "Too much instances of SSH agent is running. Stopping SSH agent instances and running just one" while pidof ssh-agent; do echo "Stopping ssh-agent..." killall -9 ssh-agent sleep 1 done echo "Starting valid SSH agent instance" eval `ssh-agent -s` ssh-add ${ssh_key} ;; esac }
输出说:
[root @ centos版本]#./ssh_tunnels.sh -sr SSH代理没有运行。 启动SSH代理。 身份添加:(pathssh密钥)
但是当我试图连接到ssh-agent并用ssh-add -L命令检查密钥时,它说:
[root @ centos版本]#ssh-add -l无法打开与authentication代理的连接。
有人可以帮我调整我的function,所以我可以build立它到我的脚本和使用? 这对于通过.bashrc运行ssh-agent是非常关键的,我需要通过这个脚本来pipe理ssh-agent(启动,停止,状态等)
先谢谢你
为了使你的脚本工作,你将不得不运行它. :
. ./ssh_tunnels.sh
的. 或者source命令告诉bash(带有其他shell的YMMV)使用当前shell执行脚本,而不是启动bash的新副本来运行脚本。
这是因为命令所需要的
eval `ssh-agent -s`
设置环境variables,让所有其他的SSH程序知道如何与代理通信。 环境variables只在它们设置的shell(以及从该shell运行的任何程序)中有效。 它们不会被传回到父shell,所以除非你在当前shell中运行命令. 当脚本退出时, SSH_AUTH_SOCK和SSH_AGENT_PIDvariables将会丢失。
我从gentoo推荐钥匙串。
https://wiki.gentoo.org/wiki/Keychain
还存在一个RPM:
https://www.rpmfind.net/linux/rpm2html/search.php?query=keychain
它提供了一个cli工具和如何绑定到你的shell环境的例子。