SSH 連線使用 SSH Key 登入(免密碼)

  • Linux

ssh 服務正常來說並不會對外開放,但在主機直接對外或需要強化登入安全,使用 ssh key 是強化 ssh 登入 server 的一種方式,可以避免掉大部分的密碼字典攻擊。

產生 ssh key

產生密鑰,請輸入下方指令

ssh-keygen

在預設下執行ssh-keygen 會建立3072位元的 RSA 密鑰,該密鑰在正常情形下已經足夠保護服務安全,但如果需要其他長度密鑰可以帶入參數 -b 4096 產出 4096 位元的密鑰。

輸入命令後,您應該看到以下輸出:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/<使用者>/.ssh/id_rsa): 

按Enter鍵將密鑰對儲存到該使用者 .ssh/ 主目錄的子目錄中,或可以指定其他位置。

如果有看到以下畫面代表,此位置已經有產生出KEY,如果要儲存在相同位置會將檔案覆蓋過去,原有的KEY 將會消失(無法復原)。

/home/your_home/.ssh/id_rsa already exists.
 Overwrite (y/n)?

接下來可以選擇輸入安全密碼,安全密碼額外增加了一層安全性,以防止未經授權的用戶登錄。如果不需請保持空白直接按下 Enter。

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

有額外的安全需求建議可以設定安全密碼,強化整體的安全性。

然後會看到類似以下內容的輸出:

Your identification has been saved in /home/<使用者>/.ssh/id_rsa
Your public key has been saved in /home/<使用者>/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:pLCMXtNf3nH/SCKEwmS3hoJrYkCtOiY5u9BGMRMbCCQ AAAAA@AAAAA
The key's randomart image is:
 +---[RSA 3072]----+
 |Eoo              |
 |o .+             |
 | .=.. o o        |
 |. .B B = o       |
 |..+ * * S o . .  |
 |o= o o + + . o . |
 |Oo*     . o o . .|
 |=B         . o ..|
 |o.            . .|
 +----[SHA256]-----+

密鑰已經產生完成,接下來就是匯入需要登入的主機中。

匯入 ssh key

方法一

使用 ssh-copy-id 來匯入 ssh key:

ssh-copy-id 使用者@主機名稱

第一次登入時會詢問您是否看過這個主機,請輸入”YES”來繼續登入:

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ubuntu/.ssh/id_rsa.pub"
The authenticity of host 'AAAAA (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:dsgXEiB8Ern4tw/sm05xVxb/c+8aAQ6Nm2H1oeOj8Qk.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

請輸入登入密碼來登入主機,如果已經有ssh key 的會跳過此步驟。

/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
使用者@主機名稱's password:

新增成功會看到類似以下畫面:

Number of key(s) added: 1
Now try logging into the machine, with:   "ssh '使用者@主機名稱'"
 and check to make sure that only the key(s) you wanted were added.

方法二

請將剛剛產出的公鑰(.pub)利用以下指令確認內容正確

cat id_rsa.pub

會看到 ssh-rsa 開頭的內文,並記下內容等等添加入下一步的指定檔案中

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDFL+E0NaxzvPzk+6ugLCwu2cdI7Tnv8kTCJl8d6/UwGWNuYJ7pv3XqhiQMsJnTthtE0Oq92IYRlkzaZRO6beWVfbFqq9WqfOxJSxqHPP/V+ZZJoOsBODh8dlSUHtghjK1fF4Rvlx6A+EZFRFoH7ygsXoXpy4J4ahgJjJ/5IIooHVEZ+WqbJchI8rKEKO+v91cVs+cqSCbaommZ1zRotVoQGnMUGZD2+8Qbzt4Hf2PjZtcsad1de0W/EwjxyPvnpki8J/pAT+j6i+nA49HXXbnJuH/hBxRQwtrwn8JBZBUXcxlpbmEY740CcgHn3WsRNAauUwHL0CY1aSDf0bVFEVkiPYJJRxCjCu1onUQ/1IG9BMDitmWHrxm6t1Pvd23chgK6xJuVMs/h5WgroyZFQf/IDyRsqwvYMOf1EG8q26X6dLTSpYLhs4+5a2mnYt9bK8GWhjKAqSTHJPfTnrwC8zpxFhjaPswUARMeGqucCIlk3h1zl5VTediOlT68/W+xEVM= AAAAA@AAAAA

登入主機後將剛剛的 ssh-rsa 字串替換掉以下指令中的 “public_key_string”。

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

authorized_keys 如果原本沒有此檔案,請執行以下指令修改檔案權限:
請將”使用者”修改成 user 帳號

chmod -R go= ~/.ssh
chown -R 使用者:使用者 ~/.ssh

使用方法一或方法二匯入後,使用 KEY 登入一次確定 ssh key 已經正確匯入。

關閉密碼登入 SSH

編輯 sshd 設定檔

sudo vi /etc/ssh/sshd_config

將ssh key 登入此功能再次確定已經打該,並且將 PasswordAuthentication 設定為no,關閉密碼登入。

在此之前此先確認可以使用 ssh key 登入 server 中,一旦關閉後無法再使用密碼登入

PubkeyAuthentication yes
#使用 ssh key 登入
PasswordAuthentication no
#禁止密碼登入

重啟 sshd 服務讓設定生效。

sudo systemctl restart sshd.service

參考來源:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *