
Я запускаю Ubuntu 16.04 в оболочке Windows Subsystem for Linux (WSL) на Windows 10. Из терминала я могу запустить ssh-agent и использовать его много раз в течение жизни этого терминала. Я вижу, что ssh-agent работает из ps, а также из диспетчера задач Windows 10.
Однако, если я запускаю 2-й терминал WSL bash из меню «Пуск», он не знает о ssh-agent. Как ни странно, если я запускаю 2-й терминал из командной строки Windows, он работает. Возможным решением было бы открытие новых окон bash из существующего, но я тоже не знаю, как это сделать.
Есть ли какое-то решение этой проблемы?
решение1
Вы можете изменить свой .bashrc, чтобы найти существующий работающий ssh-agent.
Я использую что-то, основанное насуть
# ssh-agent configuration
if [ -z "$(pgrep ssh-agent)" ]; then
rm -rf /tmp/ssh-*
eval $(ssh-agent -s) > /dev/null
else
export SSH_AGENT_PID=$(pgrep ssh-agent)
export SSH_AUTH_SOCK=$(find /tmp/ssh-* -name agent.*)
fi
# optional... potentially annoying
#if [ "$(ssh-add -l)" == "The agent has no identities." ]; then
# ssh-add
#fi
решение2
Только что заметил это из-за другого нового ответа, но большинство ответов здесь предлагают какую-то форму настройки сценария запуска (например ~/.bashrc
). Вместо того, чтобы изобретать велосипед, я бы предложилkeychain
.
После установки (доступно в большинстве репозиториев дистрибутивов, например sudo apt install keychain
), просто добавьте:
eval $(keychain --eval --agents ssh id_rsa)
... в ваш ~/.bashrc
. Это правильно установит ваши SSH_AGENT_PID
и SSH_AUTH_SOCK
переменные для текущего сеанса, чтобы они указывали на существующий ssh-agent
или запускали новый, если это необходимо. Таким образом, ssh-agent
для всех открытых сеансов WSL/терминала используется только один общий.
Интересный факт — keychain
изначально был написан Дэниелом Роббинсом, который также основал Gentoo Linux.
решение3
Возможно, нет: похоже, что ssh-agent
он запускается обычным образом, где он является родительским процессом вашей оболочки. У этого другого окна есть своя иерархия родительских/дочерних процессов, которая не связана с окном, которое вы используете.
Один из способов работысэта функция ssh-agent
заключается в запуске screen
(или tmux
) в окне, где вы запустили агента. Эти окна screen/tmux также являются дочерними процессами ssh-agent
и могут общаться с ним без проблем.
решение4
Теперь есть. Установите последнюю версиюOpenSSH для Windows, а затем получитеssh-агент-wslhelper. Следуйте инструкциям, и вы очень легко получите рабочий способ обмена учетными данными между WSL и Windows! Это работает как по волшебству!