這裡介紹 SSH 公開金鑰認證(Public Key Authentication)的使用方式,讓你不用打密碼就可以直接登入 Linux,既安全又方便。
如果你的 Linux 伺服器放在網際網路上,而且有開啟 SSH 登入的服務,這樣的情況一般都會建議使用公開金鑰認證的登入方式取代一般的密碼,這樣可以讓伺服器更安全也更方便。
如果你的 client 電腦同樣也是 Linux(也就是以 Linux 的電腦登入 Linux 伺服器),那麼就可以依照以下的步驟來設定。
Step 1
如果要在 Linux 上產生 SSH 登入用的金鑰,可以使用 ssh-keygen
這個指令。在建立金鑰之前,要先建立 ~/.ssh
這個目錄,並設定正確的權限:
mkdir -p ~/.ssh chmod 700 ~/.ssh
然後以 ssh-keygen
產生金鑰:
ssh-keygen
在產生金鑰的過程中,會詢問一些問題,對於一般的使用者而言,全部都使用預設值(直接按下 Enter 鍵)即可。
Generating public/private rsa key pair. Enter file in which to save the key (/home/seal/.ssh/id_rsa):
首先指定金鑰儲存的位置,使用預設值即可,直接按下 Enter 鍵。
Enter passphrase (empty for no passphrase):
指定金鑰保護密碼,如果有設定密碼的話,以後每次使用都要輸入密碼,除你需要非常高的安全性,否則就不用設定了,直接按下 Enter 鍵即可。
Enter same passphrase again:
再次輸入密碼,直接按下 Enter 鍵,接著就會產生金鑰了。
Your identification has been saved in /home/seal/.ssh/id_rsa. Your public key has been saved in /home/seal/.ssh/id_rsa.pub. The key fingerprint is: c7:61:98:72:02:91:94:db:12:96:05:9d:59:91:aa:25 seal@seal-desktop The key's randomart image is: +--[ RSA 2048]----+ | .=O.+oo | | *.+ .o | | . +o.+ o | | E ++ o . | | = S o | | . . | | | | | | | +-----------------+
這裡會顯示金鑰的指紋(fingerprint)與 randomart,而產生的金鑰會有兩個檔案:
id_rsa.pub
:公開金鑰(public key),這是可以對外公開的金鑰,之後要將它放在遠端的 Linux 伺服器上作認證使用。id_rsa
:私密金鑰(private key),這是要保護好的金鑰,它等同於你的 Linux 密碼,放在自己的電腦中。Step 2
將產生的 id_rsa.pub
這個公開金鑰複製到 Linux 伺服器上的 ~/.ssh/authorized_keys
檔案中:
ssh USER@HOST 'mkdir -p ~/.ssh;cat >> ~/.ssh/authorized_keys' < ~/.ssh/id_rsa.pub
如果不想要執行這麼長的指令,也可以用 ssh-copy-id
的方式:
ssh-copy-id USER@HOST
它預設會將 ~/.ssh/id_rsa.pub
這個公開金鑰複製到伺服器上,若要指定使用的金鑰,可以使用 -i
參數:
ssh-copy-id -i ~/.ssh/id_rsa.pub USER@HOST
將公開金鑰放在 Linux 伺服器上之後,就可以不用打密碼登入 Linux 了:
ssh USER@HOST
在 Linux 伺服器的部份,如果要提高安全性,可以在伺服器上的 /etc/ssh/sshd_config
中修改以下的設定,停用密碼認證的登入方式,只允許金鑰認證:
PasswordAuthentication no PubkeyAuthentication yes
這樣可以避免網路上一些亂猜密碼的攻擊。不過使用這樣的方式要先留意自己的金鑰是否設定正確,確認可以不需要密碼登入之後才進行這樣的設定,否則停用密碼登入之後,如果沒有金鑰或是沒有將公開金鑰放在伺服器上,就會完全無法登入該 Linux 伺服器。最後記得重新啟動 sshd:
/etc/init.d/sshd restart
參考資料:Ubuntu Help 、DigitalOcean