Linux/Windows 下的 SSH 自動登入指南

假設要以使用者 rainux 的身份登入執行 OpenSSH Server 的遠端主機 www.rainux.org(現在幾乎所有的 Linux 伺服器都使用 OpenSSH Server 作為 SSH Server),那麼需要做的操作如下:

  1. 生成用於 SSH 身份認證的金鑰。金鑰由公鑰和私鑰組成,一個公鑰只對應一個私鑰,一個私鑰也只對應一個公鑰。

  2. 將 OpenSSH 格式的公鑰文字追加到遠端主機上的 ~rainux/.ssh/authorized_keys 檔案裡(~rainux 意為使用者 rainux 的 HOME 目錄)。注意公鑰文字中應該沒有換行符,一行就是一個公鑰。

  3. 確保 ~rainux/.ssh/authorized_keys 許可權為 600,~/rainux/.ssh 目錄許可權為 700,並且它們的所有者都是 rainux。

  4. 指定 SSH 客戶端使用對應的私鑰並以使用者 rainux 的身份登入 www.rainux.org,此時無需輸入 rainux 在 www.rainux.org 上的密碼。

注意,如果私鑰是以加密形式儲存的(強烈建議使用一個強壯的密碼加密私鑰,這樣即使私鑰檔案被竊取,也無法被直接使用),第四步仍然需要輸入加密私 鑰所用的密碼。但是 PuTTY 和 OpenSSH 都有提供一個代理程式用於避免多次重複輸入密碼。執行代理程式後將私鑰新增到其中,並且輸入一次加密私鑰所用的密碼,然後保持代理程式的執行,以後 SSH 客戶端即可在需要使用私鑰進行身份認證的場合請求代理程式去完成身份認證(這是為了確保私鑰不會被洩漏到任何使用代理程式的客戶端上),無須再次輸入任何 密碼。

Linux / Cygwin / MSYS 上使用 OpenSSH Client

生成金鑰

執行 ssh-keygen 接受預設檔名,並且輸入加密私鑰用的密碼(passphrase)即可生成私鑰 ~/.ssh/id_rsa 和對應的公鑰 ~/.ssh/id_rsa.pub。其中 id_rsa.pub 的內容可以直接追加到遠端主機的 authorized_keys 檔案裡。

使用私鑰

把公鑰部署到遠端主機上後,即可直接執行 ssh [email protected] 來登入遠端主機。但如果私鑰是加密形式儲存,如上所述應該使用代理程式 ssh-agent 來避免每次輸入密碼。

直接執行 ssh-add 命令可以新增剛才生成的私鑰到 ssh-agent 裡,也可以用 ssh-add -l 檢視已經新增的私鑰。如果執行 ssh-add 時提示無法連線身份認證代理,則需要使用以下命令來啟動 ssh-agent。

eval `ssh-agent` 

eval `ssh-agent`

使用 eval 是為了執行 ssh-agent 輸出的設定環境變數的 bash 命令,以確保 ssh-add 可以通過 SSH_AUTH_SOCK 環境變數找到 ssh-agent。

GNOME 的桌面系統如果有安裝 gnome-keyring,它會自動管理 ssh-agent,通常甚至無須手工新增私鑰到 ssh-agent 裡,第一次使用公鑰時 gnome-keyring 就會提示輸入一次密碼,以後則不再需要。

Windows 上使用 PuTTY

生成金鑰

到 PuTTY 的下載頁面下載 putty-0.60-installer.exe 或者 putty.zip,兩者都包含 PuTTY 所有的元件。

安裝好 PuTTY 之後(對於 zip 版本來說,解壓到任意目錄即可)執行 PuTTYGen 生成自己的金鑰。選擇金鑰型別為 SSH-2 RSA,點選 Generate,按照提示在 PuTTYGen 視窗內隨機移動滑鼠直到進度條達到 100%,然後 PuTYYGen 會生成金鑰並且顯示其公鑰部分資訊。這裡可以填寫一個有意義的註釋,然後輸入一個用來加密私鑰的強壯的密碼(Key passphrase)。最後點選 Save private key 將私鑰儲存為一個 .ppk 檔案。不需要單獨 Save public key,因為 .ppk 檔案裡已經包含了公鑰。並且通過 Save public key 儲存出來的公鑰檔案格式與 OpenSSH 的格式並不相同,若要將公鑰部署到使用 OpenSSH Server 的伺服器上,只能使用 PuTTYGen 視窗上顯示的那一段 Public key for pasting into OpenSSH authorized_keys file。

使用私鑰

將公鑰部署到遠端主機上之後,使用 PuTTY 登入該遠端主機時可以在 Connection > SSH > Auth 裡選擇用於身份認證的私鑰檔案。同樣,如果私鑰是加密形式儲存,應該使用代理程式 Pageant 以避免每次輸入密碼。

最簡單的辦法是建立一個 Pageant 的快捷方式,並且將 .ppk 私鑰檔案作為引數加到快捷方式的“目標”欄裡,新增之後看上去應該像這樣:

C:\PuTTY\pageant.exe D:\main.ppk "D:\My Secrets\secondary.ppk"

C:\PuTTY\pageant.exe D:\main.ppk "D:\My Secrets\secondary.ppk"

就像上面的例子一樣,如果私鑰檔案路徑中帶有空格,應該使用引號將其括起來。通過這個快捷方式啟動 Pageant 則會自動裝載指定的私鑰檔案,並且立即詢問用於加密私鑰的密碼。以後只要保持 Pageant 的執行,並且在 PuTTY 的某個 Saved session 裡設定 Connnection > Data 裡設定 Auto-login username,即可實現雙擊該 session 則完全自動登入。