重新啟動電腦時 SSH 代理程式遺失身份

重新啟動電腦時 SSH 代理程式遺失身份

id_rsa在預設位置建立具有名稱的金鑰後。我正在使用命令向 SSH 代理添加身份ssh-add ~/.ssh/id_rsa,添加成功。

我可以在不輸入金鑰密碼的情況下進行 SSH,因為它已經與 SSH 代理一起使用了。

,當我重新啟動電腦或伺服器,然後使用命令檢查身份時,ssh-add -L我收到類似的訊息The agent has no identities

這是否意味著當我們重新啟動機器時,代理程式失去了身份?這是正常行為還是我在這裡缺少的東西?

請指導我,我對 SSH 不太熟悉。

答案1

這是正常的。金鑰代理的目的只是保存解密的金鑰在記憶中,但它永遠不會將它們寫入磁碟。 (這會達不到目的──為什麼不直接取消對主金鑰的保護呢?)

因此,每次登入時都必須解鎖金鑰,並且您需要自動執行此操作 - 在 Linux 上,使用pam_ssh是一種選擇;它自動地使用您的作業系統密碼解鎖代理。另一個類似的模組是pam_envoy,據我所知,它稍微更可靠(但需要 systemd)。

兩個模組都會自行啟動代理並自動載入密鑰。

答案2

在 OS X 上,如果您決定將私鑰儲存在其中,則 ssh-add 有一個特殊標誌可以連接到鑰匙圈。

趕緊跑ssh-add -K ~/.ssh/id_rsa

我相信這更全面地回答了你的問題。這個 OS X 特定標誌很難找到相關文檔,但至少從 OS X Leopard 開始它就一直在工作。

答案3

嘗試對您的~/.bashrc:

if [ ! -S ~/.ssh/id_rsa ]; then
  eval `ssh-agent`
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/id_rsa
  ssh-add
fi
export SSH_AUTH_SOCK=~/.ssh/id_rsa

這只會在您登入後提示您輸入密碼。

答案4

每次重新啟動後都需要解鎖才能載入到記憶體中。為此,請將以下內容新增至您的~/.bashrc

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

id_rsa建立密鑰對時不要命名它。為鍵指定一個與您嘗試存取的資源相關的有意義的名稱。它可以是任何東西,預設名稱沒有什麼特別的id_rsa

相關內容