使用 Cygwin 啟動 ssh-agent 的最佳方式是什麼?

使用 Cygwin 啟動 ssh-agent 的最佳方式是什麼?

我希望ssh-agent在啟動 Cygwin 時啟動,因為我經常使用 ssh 直通。

我嘗試添加:

eval `ssh-agent.exe`

到我的.bashrc,但每當我Alt-F2打開一個新的終端視窗時,.bashrc都會運行並因此ssh-agent創建新的,這是不希望的並且會擾亂直通。

然後我嘗試將 eval 命令移至.bash_profile,但這也會導致相同的問題 - 我猜每個新的終端視窗都被視為新的登入 shell。

第三個選項是使用cygrunsrv,但我剛剛發現它,並不清楚如何將它用於此特定目的,也許更重要的是,如何將SSH_AUTH_SOCKSSH_AGENT_PID資訊從創建服務的位置傳遞到創建的每個新 shell 。

歡迎就實現此結果的最佳方法提出任何建議(其中執行並等待單一 ssh 代理,且其資訊可立即在任何新開啟的 shell 中使用)。

答案1

您可以將其放入您的 中.bashrc,但在再次啟動之前您應該檢查它是否已經在運行。例如,你可以這樣做

if [ -z "$SSH_AUTH_SOCK" ]; then
    (umask 077; ssh-agent > "$HOME/.ssh/environment")
    ssh-add
fi

作為流程的一部分。

Also, if the agent is not running, you could first test if that environment file exists and source it like

environ="$HOME/.ssh/environment"
if [ -f "$environ" ]; then
    . "$environ" >/dev/null
fi

if [ -z "$SSH_AUTH_SOCK" ] || ! ps -p "$SSH_AGENT_PID" | grep -q ssh-agent; then
    (umask 077; ssh-agent > "$environ")
    ssh-add
fi

有一個很長的答案詳細說明了這一點這裡在 U&L 網站上。

我做了類似的事情,但讓environ檔案包含當前主機名,因為我的主目錄位於網路共享上,並且我想同時在不同的主機上運行代理程式。

為了明確地指出這如何回答您關於如何SSH_AUTH_SOCK在進程之間傳遞變數的問題,您將輸出儲存ssh-agent在一個檔案中,並在每個 shell 中再次取得它

相關內容