Linux 的 Windows 子系統 - 共用 ssh-agent?

Linux 的 Windows 子系統 - 共用 ssh-agent?

我在 Windows 10 上的 Windows Subsystem for Linux (WSL) shell 中執行 Ubuntu 16.04。我可以從 ps 以及 Windows 10 工作管理員中看到 ssh-agent 正在運行。

但是,如果我從開始功能表啟動第二個 WSL bash 終端,它不會意識到 ssh-agent。奇怪的是,如果我從 Windows 命令列啟動第二個終端,它就可以工作。一種可能的解決方法是從現有的 bash 窗口中打開新的 bash 窗口,但我也不知道該怎麼做。

有什麼辦法可以解決這個問題嗎?

答案1

您可以修改 .bashrc 以尋找現有的正在執行的 ssh 代理程式。

我使用基於的東西要旨

# 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_PIDSSH_AUTH_SOCK變數以指向現有會話ssh-agent或在需要時啟動一個新會話。這樣,ssh-agent所有開啟的 WSL/終端會話僅使用一個共用。

有趣的花絮——keychain最初是由 Daniel Robbins 編寫的,他也是 Gentoo Linux 的創始人。

答案3

也許不是:聽起來好像ssh-agent正在以通常的方式運行,它是 shell 的父進程。另一個視窗有自己的進程父/子層次結構,它與您正在使用的視窗無關。

一種工作方式此功能是在啟動代理程式的視窗中ssh-agent運行screen(或)。tmux這些 screen/tmux 視窗也是進程的子進程ssh-agent,並且可以毫無問題地與之通訊。

答案4

現在有了。安裝最新版本的適用於 Windows 的 OpenSSH,然後得到ssh-代理-wsl幫手。按照說明操作,您將很容易獲得在 WSL 和 Windows 之間共用憑證的有效方法!它就像一個魅力!

相關內容