Подсистема Windows для Linux — поделитесь ssh-agent?

Подсистема Windows для Linux — поделитесь ssh-agent?

Я запускаю 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! Это работает как по волшебству!

Связанный контент