[教學] 產生SSH Key並且透過KEY進行免密碼登入

一般我們登入伺服器可以透過密碼進行登入,但是安全性的程度會比較沒有像SSH key那個安全,而且如果使用SSH key登入的話可以就不用每次手動輸入密碼,會方便許多,本篇教如何產生SSH key並且設定到伺服器上。

產生ssh key

首先輸入指令來產生 key

ssh-keygen

接著會詢問產生的ssh key要存放的位置

這時選擇要放的位置 預設為 /home/username/.ssh/id_rsa

如果不同伺服器會使用不同的key 則改變key的位置 (例如: /home/username/.ssh/id_rsa_ubuntu)

Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):

接著會詢問要不要設定 passphrase,空白表示不設定

如果有設定passphrase,則每次用此key登入都需要輸入這個密碼

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

接下來就會產生key到指定位置了

會有兩個key 一個有副檔名 .pub 為公鑰,而沒有副檔名的為私鑰

注意私鑰要保存好 絕對不能被竊取

Your identification has been saved in /home/username/.ssh/id_rsa_ubuntu.
Your public key has been saved in /home/username/.ssh/id_rsa_ubuntu.pub.
The key fingerprint is:
SHA256:nNnQckFbuegUs4WD3y+7YqwCaDhfUlX2J17jxF7X3FU xenby@demo.com
The key's randomart image is:
+---[RSA 2048]----+
|       .o++ ..  E|
|      .  *o+.  ..|
|     .  = *+ o ..|
|    .  . Ooo+ * +|
| . o    Soo..B o.|
|o + o     . ..o  |
| + o .   .  . .  |
|  .   .   +  o   |
|       ..o .o.   |
+----[SHA256]-----+

將公鑰設定放到伺服器上

有幾個方法可以把公鑰放到伺服器上,可以依據自己的使用狀況選擇

方法一、透過 ssh-copy-id

輸入指令以下指令
(將 username 與 server_host 換成自己的帳號與伺服器IP或host,而 your_key_path 換成自己的剛剛產生的key位置)

ssh-copy-id -i your_key_path username@server_host

成功後會顯示如下的訊息

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys         

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'username@server_host'"
and check to make sure that only the key(s) you wanted were added.

方法二、直接將公鑰資料複製到 server 的 ~/.ssh/authorized_keys 中

先記下剛剛產生的公鑰資料

cat ~/.ssh/ubuntu_id_rsa.pub 

會顯示公鑰資料,把它複製下來

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDOZypQABxuCschD6jjRZFr1iPCqzrpo40Mzw6vXRfPlFwF9QJhLm3YYdtnpVekj9e1Y4kUduM924PAiLgfRw/6AJ1ueDR1BEDLeH8gAV1Cc90oPUvitYItPN8F1HrqiT37GZ3wKWKIFw70NL8Hs6BL61F+LgFmfXQDRyp7IIcyK9rmk24yqLSue/DiSbA0y85E4uvV7ekZD2NXeA9AnKHFe/cy614SQv2NNQCwi2ZRuP25du9xGVv0QvCwrZ4ANJky9V7xlO4dFFHqcNXUPQUm8EeRxySVCdTbenqiEQ3flLVBCCCxvnc7ApHlLNc/CZSpcft96xfGB3qOCrRvjb2/ xenby@demo.com

連線到伺服器上後

將公鑰資料複製到 ~/.ssh/authorized_keys 中 (下面指令的 public_key_string 要換成剛剛複製的公鑰資料)

如果該檔案已經存在就將資料新增到新的一行,如果不在就自己創建一個

echo "public_key_string" >> ~/.ssh/authorized_keys

假如剛剛自己是建立一個新的檔案,因為安全性的關係要改變 permission

輸入以下兩個指令 (username需要換成自己的帳號)

chmod -R go= ~/.ssh
chown -R username:username ~/.ssh

測試是否成功

試試看是否能正常登入使用key登入

ssh username@server_host

如果能夠不需要輸入密碼 就表示已經成功了