SSH加密連線,對於管理遠端伺服器來說,是個重要的工具,可以說是必用的工具了。但每次登入都要輸入密碼有時候滿麻煩的,然後SSH也滿friendly的,提供了一個不用輸入密碼的選擇,其實Amazon AWS,以及drupal git也是預設用這種方式連線。
用Authentication key的優點就是不用輸入密碼,安全性跟「輸入帳號密碼」相對而言較佳,要持有private key的電腦才能登入伺服器,不用擔心被人暴力破解密碼。但這裡其實也產生了一個問題,只要持有private key就可以了。所以不管用帳號或authentication key,都要好好保管。
廢話不多說,直接說明如何作,以下是在Ubuntu的環境下(基本上Linux指令應該都一樣):
- 首先在任何一台你想要用來登入伺服器的電腦建立金鑰對(key-pair),也就是一個公鑰,一個私鑰。
ssh-keygen -t rsa
- 通常會問你要不設定金鑰密碼,因為本來就希望不要輸入密碼,直接按Enter就好
Enter new passphrase (empty for no passphrase):
- 產生的金鑰會放在/home/fabio/.ssh/username 底下(username就是目前產生金鑰的帳號),會有兩個檔案
id_rsa(私鑰) , id_rsa.pub(公鑰),要好好保管私鑰,如果不見了就...,接著我們要把公鑰複製到目標伺服器去。
- 可以簡單的透過指令複製,以下是把公鑰複製到abc.com這個伺服器,要注意的是在伺服端要有userA這個帳號
ssh-copy-id userA@abc.com ...(註1)
過程中會問你userA這個帳號的登入密碼(當然,是登入到abc.com的密碼)。
- 完成後在abc.com這個伺服器裡的/home/userA/.ssh/ 這個目錄底下會出現一個檔案authentication_keys (或 authorized_keys ,可在sshd_config 設定)
有沒有注意到是"keys",也就是說可以有不只一個公鑰可以放在裡面 - 然後要記得要修改abc.com的ssh的設定檔,找到以下兩個設定值取消註解,如果沒有就自己新增
RSAAuthentication yesPubkeyAuthentication yes...(註2)
- 然後重啟abc.com的sshd服務
sudo service sshd restart
- 完成,可以試著登入看看
註1:ssh-copy-id 可以指定公鑰的位置,加上參數 -i即可,範例如下:
ssh-copy-id -i /home/otheruser/.ssh/id_rsa.pub userA@abc.com
註2:如果未來只希望用key登入,不希望任何人透過密碼連線,則可以加上以下設定
PasswordAuthentication no
註3: 如果是要手動添加 authorized_keys 的話,~/.ssh 以及 ~/.sshd/authorized_keys 的權限分別要設定為 700 與 600