大家好,我整天都在阅读类似的主题,但不幸的是找不到适合我情况的答案。所以这就是我想做的。我有包含很多函数的 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 variations]# ssh-add -l 无法打开与您的身份验证代理的连接。
有人能帮我调整一下我的功能,这样我就可以把它建到我的脚本中并使用吗?这很关键,不能通过 .bashrc 运行 ssh-agent,我需要通过这个脚本来管理 ssh-agent(启动、停止、状态等)。
先感谢您
答案1
为了使您的脚本正常工作,您必须使用以下命令运行它.
:
. ./ssh_tunnels.sh
.
或命令source
告诉 bash(与其他 shell 不同)使用当前 shell 执行脚本,而不是启动 bash 的新副本来运行脚本。
这是必需的,因为命令
eval `ssh-agent -s`
设置环境变量,让所有其他 ssh 程序知道如何与代理通信。环境变量仅在设置它们的 shell 中有效(以及从该 shell 运行的任何程序)。它们不会传递回父 shell,因此除非您在当前 shell 中使用 和 运行命令,否则脚本退出时变量将.
丢失SSH_AUTH_SOCK
。SSH_AGENT_PID
答案2
我推荐 gentoo 的 keychain。
https://wiki.gentoo.org/wiki/Keychain
也以 RPM 形式存在:
https://www.rpmfind.net/linux/rpm2html/search.php?query=keychain
它提供了一个 cli 工具以及如何与您的 shell 环境结合的示例。