运行 ssh-agent 的 shell 脚本

运行 ssh-agent 的 shell 脚本

大家好,我整天都在阅读类似的主题,但不幸的是找不到适合我情况的答案。所以这就是我想做的。我有包含很多函数的 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_SOCKSSH_AGENT_PID

答案2

我推荐 gentoo 的 keychain。

https://wiki.gentoo.org/wiki/Keychain

也以 RPM 形式存在:

https://www.rpmfind.net/linux/rpm2html/search.php?query=keychain

它提供了一个 cli 工具以及如何与您的 shell 环境结合的示例。

相关内容