2024年3月14日 星期四

How to setup SSH Key passwordless login in Linux

在 Linux 中設定 SSH Key 免密碼登入

為了某些目的,登入遠端主機時不需要輸入密碼,先在使用者主機生成一組key,
包含公鑰(Public Key)與私鑰(Private Key),再將公鑰傳送至遠端主機,達成登入免輸入密碼。
現在環境使用Centos 7,參考RedHat 原廠文件進行設定。參考資料1

1.在使用者主機使用想要遠端登入的帳號執行ssh-keygen生成金鑰SSH-Key

在預設執行ssh-keygen 會產生2048位元的RSA金鑰。
在生成過程當提示輸入密碼時,如果需要完全無密碼登錄,請使用空白密碼。
01-ssh-keygen

如果想要用長度更長的 key 如 3,072 或 4,096 bits,可使用 -b 3072 或 -b 4096。
也可以使用不同加密方式如ssh-keygen -t ecdsa或ssh-keygen -t ed25519,產生密鑰。
 不同加密方式產生的檔案名稱會有不同,RSA是id_rsa,ECDSA是id_ecdsa。

2. 將公鑰安裝到遠端主機的使用者帳戶
選擇以下任一方法將公鑰安裝到遠端主機中的使用者帳戶。
2.a.使用ssh-copy-id
可以使用ssh-copy-id指令將產生的身份驗證金鑰的公鑰部分安裝到遠端主機使用者的主目錄中
ssh-copy-id -i ~/.ssh/id_rsa.pub user@ssh-server.example.com
02-ssh-copy-id


出現提示時,提供遠端使用者的密碼。 
ssh-copy-id會自動將使用者資訊附加到遠端主機上指定使用者的檔案~/.ssh/authorized_keys。
ssh-copy-id是包含在openssh-clients中,如要使用此方法請先確認是否安裝openssh-clients。
安裝過程請確認公鑰檔案。

2.b.使用ssh和cat
可以 ssh 登入遠端主機,但是openssh-clients 未安裝,使用以下命令有助於將公鑰複製到伺服器:
cat ~/.ssh/id_rsa.pub | ssh user@ssh-server.example.com "cat >> ~/.ssh/authorized_keys"

2.c.直接編輯遠端主機主機~/.ssh/authorized_keys
可以 ssh 登入遠端主機,直接將使用者公鑰內容編輯寫入遠端主機~/.ssh/authorized_keys中

3.檢查檔案權限
.ssh目錄及authorized_keys 不能具有寫入權限。
如果檔案模式不正確,使用以下命令修復:
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh/

4.停用密碼認證,只允許金鑰認證登入,避免網路亂猜密碼的攻擊。
在主機的 /etc/ssh/sshd_config 修改以下的設定
---
PasswordAuthentication no
PubkeyAuthentication yes
---

修改完成後,請重新啟動sshd。

5.關於加密方法的選擇,依據參考資料2
如果連線舊的作業系統,選用 RSA,並指定至少 3,072 bits 長度。
如果連線比較新的系統,選用 ED25519 。GitHub 和 GitLab 都能支援設定 ED25519。

參考資料:
1.如何在 Red Hat Enterprise Linux 中設定 SSH Key 免密碼登入
2.選擇 SSH key 的加密演算法

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。