Ale*_*nyk 0 ssh shell bash ssh-agent
美好的一天,我一整天都在阅读类似的主题,但不幸的是找不到适合我情况的答案。所以这就是我想要做的。我有很多函数的 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
}
Run Code Online (Sandbox Code Playgroud)
输出说:
[root@centos 版本]# ./ssh_tunnels.sh -sr SSH 代理没有运行。启动 SSH 代理。添加的身份:(ssh 密钥的路径)
但是当我尝试连接到 ssh-agent 并使用 ssh-add -L 命令检查密钥时,它说:
[root@centos 版本]# ssh-add -l 无法打开到您的身份验证代理的连接。
有人可以帮我调整我的功能,以便我可以将它构建到我的脚本中并使用吗?不要通过 .bashrc 运行 ssh-agent,这一点很重要,我需要通过这个脚本(启动、停止、状态等)来管理 ssh-agent
先感谢您
为了使您的脚本工作,您将不得不使用以下命令运行它.:
. ./ssh_tunnels.sh
Run Code Online (Sandbox Code Playgroud)
该.或source命令是告诉bash(因人而异其他shell)使用当前的外壳,而不是开始的bash的新副本运行脚本执行脚本。
这是必需的,因为命令
eval `ssh-agent -s`
Run Code Online (Sandbox Code Playgroud)
设置环境变量,让所有其他 ssh 程序知道如何与代理通信。环境变量仅在设置它们的 shell 中有效(以及从该 shell 运行的任何程序)。他们不是通过备份到父外壳,所以除非你有运行在当前shell命令.的SSH_AUTH_SOCK和SSH_AGENT_PID变量都将丢失脚本退出时。
| 归档时间: |
|
| 查看次数: |
1222 次 |
| 最近记录: |