
我希望ssh-agent
在啟動 Cygwin 時啟動,因為我經常使用 ssh 直通。
我嘗試添加:
eval `ssh-agent.exe`
到我的.bashrc
,但每當我Alt-F2
打開一個新的終端視窗時,.bashrc
都會運行並因此ssh-agent
創建新的,這是不希望的並且會擾亂直通。
然後我嘗試將 eval 命令移至.bash_profile
,但這也會導致相同的問題 - 我猜每個新的終端視窗都被視為新的登入 shell。
第三個選項是使用cygrunsrv
,但我剛剛發現它,並不清楚如何將它用於此特定目的,也許更重要的是,如何將SSH_AUTH_SOCK
和SSH_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 中再次取得它