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
。