透過 SSH 登入時執行 ssh-agent 和 ssh-add 的直接方法是什麼?

透過 SSH 登入時執行 ssh-agent 和 ssh-add 的直接方法是什麼?

我試圖在透過 ssh 登入伺服器時自動執行以下命令:

ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa

我的 ssh 金鑰有一個密碼,每次登入時輸入一次就可以了。

我嘗試將其放入我的 .bashrc 檔案中,但是我相信 ssh-agent 會啟動一個新的 bash 會話。當我在 .bashrc 中包含此內容後嘗試登入時,它被卡住了,我必須輸入“exit”才能看到“輸入密碼以解鎖密鑰”提示

還有其他建議嗎?

伺服器正在運行 Ubuntu LTS

答案1

你可以嘗試添加這個:

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

這樣,它ssh-agent不會啟動新的 shell,它只是在後台啟動自身並發出 shell 命令來設定適當的環境變數。

正如評論中所說,也許你會這樣做不是想要在遠端主機上運行代理,而不是在您正在使用的機器上運行代理,並使用

ssh -A remote-host

將本機 ssh 代理程式的服務轉送到遠端主機。

出於安全原因,您應該只對由值得信賴的人運行的主機使用代理轉發,但這比任何時候遠端運行完整的代理都要好。

答案2

另一種選擇是將其添加到您的 .bashrc 中。這與 Erik 的答案具有相同的優點(確保單一實例),但不需要額外的套件。

# SSH Agent should be running, once
runcount=$(ps -ef | grep "ssh-agent" | grep -v "grep" | wc -l)
if [ $runcount -eq 0 ]; then
    echo Starting SSH Agent
    eval $(ssh-agent -s)
fi

如果未載入至少 1 個金鑰,則會執行 ssh-add 並將金鑰逾時設為 1 天:

ssh-add -l &>/dev/null
if ! [ "$?" == 0 ]; then
     echo Adding keys...
     ssh-add -t 1d
fi

答案3

一種替代方法是使用 Funtoo 的鑰匙鏈。然後你可以將這一行程式碼貼到你的 bash shell 中:

eval $(keychain --eval id_rsa)

這會執行相同的操作(啟動 ssh 代理程式等),同時也不為每個子 shell 執行 ssh 代理程式。相反,它會尋找您擁有的“已經運行”的實例並將您附加到它們。

答案4

另請記住,如果您有 ssh 連線保持活動狀態,則需要在-A生效之前刪除現有的連線檔案。刪除 .ssh 檔案中的所有 ssh 連線檔案/tmp/[host]

相關內容