用于运行 ssh-agent 的 shell 脚本

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

先感谢您

Der*_*rfK 5

为了使您的脚本工作,您将不得不使用以下命令运行它.

. ./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_SOCKSSH_AGENT_PID变量都将丢失脚本退出时。