美好的一天,我整天都在阅读类似的主题,但不幸的是找不到适合我情况的答案。所以这就是我想要做的。我有一个带有很多函数的 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 代理。添加的身份:(ssh 密钥的路径)
但是当我尝试连接到 ssh-agent 并使用 ssh-add -L 命令检查密钥时,它会说:
[root@centos 版本]# ssh-add -l 无法打开与您的身份验证代理的连接。
有人可以帮我调整我的功能,以便我可以将它构建到我的脚本中并使用吗?这对于不通过 .bashrc 运行 ssh-agent 至关重要,我需要通过此脚本(启动、停止、状态等)管理 ssh-agent
先感谢您
为了使您的脚本正常工作,您必须使用以下命令运行它
.
:.
orsource
命令告诉 bash(YMMV 与其他 shell)使用当前 shell 执行脚本,而不是启动新的 bash 副本来运行脚本。这是必需的,因为命令
设置环境变量,让所有其他 ssh 程序知道如何与代理通信。环境变量仅在设置它们的 shell 中有效(以及从该 shell 运行的任何程序)。它们不会传递回父 shell,因此除非您在当前 shell 中运行命令,否则脚本退出
.
时SSH_AUTH_SOCK
,SSH_AGENT_PID
变量将丢失。我推荐gentoo的钥匙串。
https://wiki.gentoo.org/wiki/Keychain
也作为 RPM 存在:
https://www.rpmfind.net/linux/rpm2html/search.php?query=keychain
它提供了一个 cli 工具和示例,说明如何绑定到您的 shell 环境中。