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