使用我已经运行的 ssh-agent 进程

使用我已经运行的 ssh-agent 进程

我在 tty2 上有一个 bash 会话,并且有一个ssh-agent来自上一个会话 (TTY = ?) 的属于我的进程(相同的用户 ID)

在 tty2 上,ssh-add说: Could not open a connection to your authentication agent.

eval $(ssh-agent)即使已经有一个进程正在运行,我每次登录时都必须启动吗ssh-agent?但最后,我将ssh-agent运行许多流程实例:-(

编辑:我想使用我已经运行的ssh-agent进程。

我找到了一种联系我已经跑步的方法ssh-agent,如下所示:

export SSH_AUTH_SOCK=$(find /tmp/ssh-*/ -user $USER -type s -name "agent.*" 2>/dev/null | head -1)
export SSH_AGENT_PID=$(echo $SSH_AUTH_SOCK | cut -d. -f2)

但我不确定这是否非常安全。

编辑2:每次我运行此命令时,该命令eval $(ssh-agent)都会启动一个新的进程实例:-(ssh-agent

答案1

您可以同时评估并保存 ssh-agent 输出,

eval $(ssh-agent | tee agent.env)

然后从其他终端或后续会话,

source agent.env

收紧权限以稍微更安全,

chmod go-rwx agent.env

答案2

首先,您是通过 ssh 会话执行此操作吗?如果是这样,那么您可以使用甚至不使用 ssh-agent。该选项会将主机的 ssh 代理转发到远程服务器。然后您甚至不需要将 ssh 密钥复制到远程服务器。ssh -A [email protected]-A

回到最初的问题:运行的问题ssh-agent是默认情况下它每次都会使用不同的随机套接字名称。您想要做的是使用ssh-agent -a提供固定插座的选项。那么无论你调用多少次,它都不会启动另一个 ssh-agent。

这是一个简单的脚本,它将始终重复使用相同的 ssh-agent,或者在 ssh-agent 未运行时启动它。您也可以轻松地将这 3 行组合成 1 行别名。

# set SSH_AUTH_SOCK env var to a fixed value
export SSH_AUTH_SOCK=~/.ssh/ssh-agent.sock

# test whether $SSH_AUTH_SOCK is valid
ssh-add -l 2>/dev/null >/dev/null

# if not valid, then start ssh-agent using $SSH_AUTH_SOCK
[ $? -ge 2 ] && ssh-agent -a "$SSH_AUTH_SOCK" >/dev/null

来源

相关内容