
我在 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_PID
和SSH_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 之間共用憑證的有效方法!它就像一個魅力!