Процесс ssh-agent не виден пользователю, который его создал, но виден пользователю root.

Я использовал следующий фрагмент из документации Visual Studio Code для создания входа в систему:

      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

Однако я вижу, что при каждом входе в систему создается новый, когда мой~/.zprofileисходный код, даже если у меня открыто еще несколько сеансов.

Во время отладки проблемы я понял, что вызовeval "$(ssh-agent -s)"создает агента и печатает его PID на терминале. Однако, когда я вызываюps,pgrep,htopили подобные команды, они не показывают процесс. Если я повторю те же команды с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"
Другие вопросы по тегам