如果打開了新的 gnome 終端,則會忘記 ssh-add
之後:
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-add
並ssh
參考幾個環境變數來找到要與之交談的 SSH 代理:SSH_AGENT_PID
和SSH_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 &
然後它將執行該命令並設置必要的環境變數。