ssh-agent 进程对于创建它的用户是不可见的,但对于 root 是可见的

ssh-agent 进程对于创建它的用户是不可见的,但对于 root 是可见的

我采用了以下片段Visual Studio Code 的文档创建ssh-agent登录:

if [ -z "$SSH_AUTH_SOCK" ]; then
   # Check for a currently running instance of the agent
   RUNNING_AGENT="`ps -ax | grep 'ssh-agent -s' | grep -v grep | wc -l | tr -d '[:space:]'`"
   if [ "$RUNNING_AGENT" = "0" ]; then
        # Launch a new instance of the agent
        ssh-agent -s &> .ssh/ssh-agent
   fi
   eval `cat .ssh/ssh-agent`
fi

但是,我发现每次登录时,ssh-agent当我获取信息时都会创建一个新的~/.zprofile,即使我打开了其他几个会话。

在调试问题时,我意识到调用 会eval "$(ssh-agent -s)"创建代理并将其 PID 打印在终端上。但是,当我调用pspgrephtop或类似命令时,它们不会显示该ssh-agent进程。如果我使用 重新运行相同的命令sudo,我就可以找到该进程。

我该怎么做才能让ssh-agent调用该流程的用户可以看到该流程,以便他们可以在所有会话中使用同一个代理?

答案1

我有类似的东西,使用用户服务要简单得多。

[Unit]
Description=SSH Authentication Agent
Documentation=man:ssh-agent
Requires=run-user-%U.mount

[Service]
Type=exec
ExecStart=/usr/bin/ssh-agent -a %t/ssh-agent.sock -D
Restart=on-failure

RuntimeDirectory=ssh
RuntimeDirectoryMode=0700
KillMode=process
KillSignal=SIGTERM

[Install]
WantedBy=default.target

您只需为用户启用该服务(systemctl --user enable --now ssh-agent.service),它将从第一个会话开始。如果您需要为所有用户启用它,请使用systemctl --global enable ssh-agent.service

将其添加到~/.zprofile(或/etc/zsh/zprofile所有用户):

# SSH_AGENT_PID isn't really necessary since it's mainly used to terminate the agent with `ssh-agent -k`
typeset -x SSH_AGENT_PID="$( systemctl --user show --property=MainPID --value ssh-agent.service )"
typeset -x SSH_AUTH_SOCK="${XDG_RUNTIME_DIR}/ssh/ssh-agent.sock"

相关内容