在 Linux Server 下使用 Public/Private-Key(公鑰/私鑰) 遠端登入 SSH 的方式相信大家應該都不陌生(沒實做過的可參考鳥哥或study-area的文件),下面我所要介紹的是在 Windows 下使用 Public/Private-Key 遠端登入 SSH 的方法。
開始之前先說一下 “Public/Private-Key” 的概念,”Public/Private-Key” 是一種 “交互信任” 的機制,由用戶(Client)端以特定的加密演算法產生兩把金鑰,即 “Public-Key” 與 “Private-Key”,然後我們會把 “Private-Key” 留在自己的電腦,再把 “Public-Key” 傳送到遠端主機,當兩把金鑰碰在一起就會進行加解密比對,以確認是否彼此的身份是可以信任的,藉以執行特定的作業。
但我有一個更簡單的說法,與其說是 “公鑰” 與 “私鑰”,不如說是 “鎖頭” 與 “鑰匙”,由我自己來打造一個 “鎖頭” 及一把 “鑰匙”,我把這個 “鎖頭” 裝在某個門上,然後我就可以用我的這一把 “鑰匙” 來打開這個門了! 同樣的,我也可以把相同的 “鎖頭” 裝在很多的門上,那我就可以用這一把 “鑰匙” 來開啟很多門了(怎樣,很酷吧!)…這樣子的概念是否有比較清楚了呢?!
我們的目的是要從 Windows 以 “Public/Private-Key” 登入 Linux 主機,下面的步驟所要使用的軟體,都是由
PuTTY 所提供的工具程式,請先下載存放在自己的電腦:
產生 Public/Private-Key
執行 puttygen.exe:

- 先在 Parameters 的 “Type of key to generate” 欄位選 “SSH-2 DSA”。
- 如果你希望加密更多的位元數,可更改 “Number of bits in a generated key” 為 “2048″ 或更多。
- 然後按 [Generate],就會開始產生金鑰。在產生金鑰的同時,請隨意移動你的滑鼠,做為 “隨機亂數” 的取用。
金鑰產生完畢,如下圖所示:

- 在 “Public key for pasting into OpenSSH authorized_keys file” 裡那一堆的奇怪的字串就是 Public-Key,請直接複製裡面的內容,然後貼到 Linux 主機上的 “/home/登入帳號/.ssh/” 目錄下的 “authorized_keys” 檔案(請注意 “authorized_keys” 這個檔案的權限必須為 “644″)。
- 然後按 [Save private key] 按鈕,將 “Private-Key” 儲存在你的電腦。與 Private-Key 比較有關的是 “Key passphrase” 及 “Confirm passphrase” 這兩個欄位,這兩個欄位是 “Private-Key” 的密碼,如果有輸入密碼的話,只要在每次使用的第一次載入 Private-Key 時,會詢問你一次這個密碼,可以讓你的 Private-Key 較不容易被盜用。
- 另外還有一個 [Save public key],按下去之後就可以把 Public-Key 再備份一支到你的電腦 (但要使用這個備份的 Public-Key 時,必須把裡面的一些註解刪掉才行)。
使用 Private-Key 遠端登入
- 產生完上面的兩把金鑰,並將 Public-Key 傳送到遠端的電腦之後,接下來就是如何在本地端載入 Private-Key 的問題了,因為 Windows 並不像 Linux 有一個固定的地方存放 Private-Key,所以每次使用時都要各別載入,而且通常只能載入一個 Private-Key(例如 PieTTY 是從 [選項] → [詳細設定] → Connection → SSH → Auth 裡的 “Private key file for authentication” 載入),並且只能在該程式使用。所以接下來我們要執行 pageant.exe,這是 Private-Key 的代理程式,一執行這個程式,他會常駐在工作列的 “通知” 區塊,請在 pageant 的圖示上點滑鼠右鍵選 “Add Key”,將你的 Private-Key 檔案加入。在加入 Private-Key 時,如果你在上個步驟有設定 “Key passphrase”,它就會跳出對話框叫你輸入密碼。這個代理程式可以同時讓你輸入很多 Private-Key,並且所有同類型的程式都可以直接使用。
現在你就可以用你常用的 SSH 程式 (PieTTY, PuTTY…) 來登入到 Linux 主機看看,正確的話,只要輸入帳號,不用再打密碼就可以登入了。
補充…
使用 TortoiseSVN 配合 SSH
- 如果你有在使用 SVN 版本控制系統的話(假設 SVN Server 是架在 Linux 主機,用戶端為 Windows,用戶端有安裝 TortoiseSVN),剛好 SVN 就有提供 “SVN+SSH” 的通訊協定來傳輸資料。如果你的專案是以 “SVN+SSH” 做為通訊協定,每次你在執行任何 TortoiseSVN 的傳輸動作時,它就會 “不厭其煩” 的跟你詢問遠端主機的密碼。如果想要依照上面的步驟採 Public/Private-Key 來與 Linux 主機做用戶驗證,請記得再到 TortoiseSVN 的參數設定裡的 “Dialogs 2″ 將 “Recurse into unversioned folders” 及 “Contact the repository on startup” 這兩個選項都打勾,如下圖所示:

這樣應該就可以解決密碼詢問的問題了。
- Posted by citypig at 08:47 pm (1,395 views)
- No comments published
- Filed under: ssh, svn


