Процесс 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"