2009-11-01

Ubuntu 用 SSH + 憑證登入遠端主機

為了安全起見,阿舍都會使用 SSH 連線到 VPS上操作,使用 SSH 連線是可以減少資料被攔截而被駭的風險,但是,沒有辦法防止人家來猜密碼,所以,如果要根本解決這個問題的話,那就是要讓 SSH 不用打帳號和密碼,可是,不用打密碼和帳號要怎麼連線呢 ? 那就要用 SSH 加  憑證的方式才行,也就是說,要建立 SSH 連線,就一定要有正確的憑證才登入,如果沒有,那麼,就算有密碼也是沒有用的。

以下就是在 Ubuntu 透過 SSH 加憑證的方式來建立連線的設定步驟。

1. 建立憑證

請在自己的電腦上執行下列指令來建立憑證。

ssh-keygen

  • 這個指令預設會把產出的憑證檔放在目前使用者的家目錄的 .ssh 資料夾裡,並且會自動命名為 id_ras。
  • 執行過程會詢問是否建立passphrase,可以不輸入,若有輸入 passphrase 的話,那麼在登入後,就需要輸入這一組 passphrase。
 2. 上傳憑證檔

執行下列指令把產生出來的憑證檔上傳到要用 SSH 登入的主機 (註: 遠端主機的使用者家目錄下要先建好 .ssh 資料 )。

scp ~/.ssh/id_rsa.pub ayubiz@arthurtoday.com.tw:~/.ssh/xyz_key.pub

ayubiz 是遠端主機的使用者
arthurtoday.com 是遠端主機的位址
~/.ssh/xyz_key 是遠端主機要存放這個憑證的位置和檔名


3. 複製和變更上傳檔案

執行下列指令把上傳上去的檔案複製到 ayubiz 這個使用者的家目錄的 .ssh 資料夾下,並將檔名變更為 authorized_keys。

ssh ayubiz@arthurtoday.com "echo `cat ~/.ssh/xyz_key.pub` >> ~/.ssh/authorized_keys"

如果不想打像上面這麼長的指令的話,也可以直接 SSH 到遠端主機後,執行下面這一行指令


cat ~/.ssh/xyz_key.pub >> ~/.ssh/authorized_keys


4.調整 authorized_keys 檔權限

再來,需要調整 authorized_keys 檔案的權限,不然會出現 Permission denied (publickey) 的錯誤訊息,可以選擇下列任一種方式來執行,阿舍建議用第二種就可以了。

chmod 400 ~/.ssh/authorized_keys
只有 root 可以修改此檔



chmod 600 ~/.ssh/authorized_keys
 使用者自己可以修改此檔


5.停用 SSH 的密碼認證

已經設定好用憑證來登入 SSH 之後,接下來就是要把 SSH 的密碼認證方式給停用掉,這樣,就只有有設定憑證的賈腦才可以連線,這樣,就可以減少被不良人士試出密碼的機會,請用下面的指令來開啟 SSH 的設定檔,然後,把 「PasswordAuthentication」 這項目從 yes 改為 no,接著存檔和重開,如果「PasswordAuthentication」前面有 # 號的話,也要刪掉 。

sudo vi /etc/ssh/sshd_config

6. 重新啟動 SSH 服務

sudo service ssh restart

7. 開始 SSH 連線

ssh xyz@xxx.com.tw

如果有設定 passphrase,這時就會出現要輸入的畫面,不然,就會直接登入了。

問題還是沒解決嗎 ?? 這裡有更多的 Ubuntu 相關教學可以參考哩 ...


關於阿舍

好文不藏私,請多分享囉!! ^^=

2 則留言 :

Tod 提到...

請教一下阿舍站長
上傳的指令
scp ~/.ssh/id_rsa.pub ayubiz@arthurtoday.com.tw:~/.ssh/uploaded_key.pub

與之後複製的指令
ssh ayubiz@arthurtoday.com "echo `cat ~/.ssh/id_rsa.pub` >> ~/.ssh/authorized_keys"

檔案似乎出錯
uploaded_key.pub id_rsa.pub
把第二個指令的id_rsa.pub 改為 uploaded_key.pub應該就可行 ~

Arthur 提到...

Hello,

已經更正了,十分感謝 !! ^^=


Arthur...