如何检查 ssh-agent 是否已经在 bash 中运行?

新手上路,请多包涵

我在我的 Linux 环境中有一个示例 sh 脚本,它基本上运行的是当前 shell 的 ssh-agent ,为其添加一个密钥并运行两个 git 命令:

 #!/bin/bash
eval "$(ssh-agent -s)"
ssh-add /home/duvdevan/.ssh/id_rsa

git -C /var/www/duvdevan/ reset --hard origin/master
git -C /var/www/duvdevan/ pull origin master

脚本实际上工作正常,但每次我运行它时,我都会得到一个新进程,所以我认为它可能会成为性能问题,我可能最终会得到无用的进程。

输出示例:

 Agent pid 12109
Identity added: /home/duvdevan/.ssh/custom_rsa (rsa w/o comment)

此外,除此之外,是否有可能找到一个现有的 ssh-agent 进程并将我的密钥添加到其中?

原文由 Zlatan Omerović 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

不,真的,如何检查 ssh-agent 是否已经在 bash 中运行?

到目前为止的答案似乎没有回答原始问题……

这对我有用:

 if ps -p $SSH_AGENT_PID > /dev/null
then
   echo "ssh-agent is already running"
   # Do something knowing the pid exists, i.e. the process with $PID is running
else
eval `ssh-agent -s`
fi

这是从这里拍摄的

原文由 AndrewD 发布,翻译遵循 CC BY-SA 4.0 许可协议

此外,除此之外,是否可以找到现有的 ssh-agent 进程并将我的密钥添加到其中?

是的。我们可以将连接信息存储在一个文件中:

 # Ensure agent is running
ssh-add -l &>/dev/null
if [ "$?" == 2 ]; then
    # Could not open a connection to your authentication agent.

    # Load stored agent connection info.
    test -r ~/.ssh-agent && \
        eval "$(<~/.ssh-agent)" >/dev/null

    ssh-add -l &>/dev/null
    if [ "$?" == 2 ]; then
        # Start agent and store agent connection info.
        (umask 066; ssh-agent > ~/.ssh-agent)
        eval "$(<~/.ssh-agent)" >/dev/null
    fi
fi

# Load identities
ssh-add -l &>/dev/null
if [ "$?" == 1 ]; then
    # The agent has no identities.
    # Time to add one.
    ssh-add -t 4h
fi

这段代码来自 ssh 代理 的陷阱,它描述了你当前正在做的事情、这种方法的缺陷,以及你应该如何使用 ssh-ident 来为你做这件事。


如果您只想在 ssh-agent 未运行时运行它,否则什么也不做:

 if [ $(ps ax | grep [s]sh-agent | wc -l) -gt 0 ] ; then
    echo "ssh-agent is already running"
else
    eval $(ssh-agent -s)
    if [ "$(ssh-add -l)" == "The agent has no identities." ] ; then
        ssh-add ~/.ssh/id_rsa
    fi

    # Don't leave extra agents around: kill it on exit. You may not want this part.
    trap "ssh-agent -k" exit
fi

但是,这并不能确保 ssh-agent 可以访问(仅仅因为它正在运行并不意味着我们有 $SSH_AGENT_PID 用于 ssh-add 可以连接)。

原文由 idbrii 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题