Ssh-Agent

如果打開了新的 gnome 終端,則會忘記 ssh-add

  • April 30, 2015

之後:

eval `ssh-agent -s`
ssh-add

我可以在沒有密碼的情況下通過 ssh 登錄到“伺服器”。

**問題:**但是如果我打開一個新的 gnome 終端,我必須再次這樣做,為什麼?

將 RHEL 桌面 6.6 與 GNOME 一起使用。

更新 #1:有趣的是,另一個 RHEL 桌面不執行 ssh-agent,每次啟動它只需要一個“ssh-add”。但是在“壞桌面”上發出“ssh-add”只會給出錯誤消息:“無法打開與您的身份驗證代理的連接。”

更新#2:重新啟動後缺少 SSH_AUTH_SOCK,也許這就是問題所在?:

[user@notebook ~]$ env | grep SSH
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
[user@notebook ~]$ 

ssh-addssh參考幾個環境變數來找到要與之交談的 SSH 代理:SSH_AGENT_PIDSSH_AUTH_SOCK. 當你跑

eval `ssh-agent -s`

ssh-agent輸出值,你的 shell 解釋它們;它們設置在執行命令的 shell 中,並且僅在該 shell 中設置。因此,當您啟動一個新終端時,該終端中的新 shell 沒有正確設置這些變數並且ssh找不到代理。

如果兩個終端都在執行,則可以執行

env | grep SSH

在您啟動代理的終端中,並設置新終端中給定的值。然後ssh應該在第二個終端找到代理。

不過,更好的解決方案是使用 GNOME 中的 SSH 代理集成,由gnome-keyring. 我不確定在 RHEL Desktop 中是如何設置的,但是您可以嘗試在ssh-add不事先啟動代理的情況下簡單地執行…

GNOME 密鑰環SSH文件可能會有所幫助;特別是,您可能需要檢查是否在您的啟動應用程序中啟用了 SSH 密鑰代理(在 GNOME 屬性中)。

ssh-agent -s返回一些要設置的環境變數,如下所示:

SSH_AUTH_SOCK=/tmp/ssh-OIohiYiJShSO/agent.11139; export SSH_AUTH_SOCK;
SSH_AGENT_PID=11140; export SSH_AGENT_PID;

雖然它們會延續到從這些設置的 shell 啟動的程序中,但它們不適用於不是從該 shell 啟動的程序。當您從桌面或菜單打開一個新的 gnome-terminal 時,它不會通過該 shell 啟動,因此它不會獲取環境變數。

如果您從執行的 shell 啟動新終端exec ssh-agent -s``,例如通過鍵入gnome-terminal &,它將繼承 shell 變數並且它應該可以工作。或者,您可以ssh-agent使用命令呼叫,如下所示:

ssh-agent gnome-terminal &

然後它將執行該命令並設置必要的環境變數。

引用自:https://unix.stackexchange.com/questions/199560