正常情況下,按照密鑰對,並將公鑰加入到服務其的 ~/.ssh/authorized_keys
中即可實現免密登錄。
但也會意外情況,最近遇到了即使確認配置無誤但仍然需要輸入密碼的問題,這裡對排查過程進行記錄,把所有可能的情況進行梳理。
無法免密登錄可能的原因#
1. 文件和目錄權限問題#
檢查 user
用戶的 ~/.ssh
目錄和 ~/.ssh/authorized_keys
文件權限,不合理的權限配置可能會被 SSH 服務拒絕。
因此,這裡必須將 ~/.ssh
設置為 700,將 ~/.ssh/authorized_keys
設置為 600
# 在遠程服務器上的目標用戶的home(~指向的地址)執行
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
~ 會指向當前用戶的 home 目錄,如果是 root 用戶想要指定 user
的對應配置文件及目錄,需要使用絕對路徑。 一般情況下,user
目錄的絕對路徑是 /home/user/
; 綁定了數據盤,也有可能在 /data/home/user
,視具體情況而定。
2. SSH 配置文件#
這個可能是容易被忽略的問題,一般情況下 SSH 配置不會有問題,但是如果出現了確認以上配置無誤還是無法連接時,要檢查下 SSH 配置文件 etc/ssh/sshd_config
,確保一下設置是啟用的:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
這兩項分別開啟了公鑰認證功能和公鑰文件的位置,修改完之後,需要重啟 sshd
服務
sudo systemctl restart sshd
根據系統,重啟命令可能不同,如果提示
systemctl
找不到,可以嘗試sudo service sshd restart
3. 用戶 home
目錄的權限問題#
如果要使用 user
免密登錄,必須要確保 user
的 home 目錄不對其他用戶開放權限 。因為如果其他用戶可以寫 user
的 home 目錄,SSH 可能會拒絕登錄,因為這個認為是不安全的,因此 home
目錄應該限制為只有自己可以寫入。
755 /data/home/user
日誌分析#
如果以上原因都已排查,還是無法免密登錄,可以使用 SSH 服務的日誌文件,可能會有登錄失敗的相信信息,幫助進行診斷。對於 systeme
系統(包含 Fedora、Ubuntu、Debian、CentOS/RHEL 7 及更高版本),可以使用以下命令:
sudo journalctl -u sshd
比如我這邊在排查時,發現日誌內容如下:
-- Logs begin at Tue 2024-03-19 10:34:54 CST, end at Thu 2024-03-21 10:19:04 CST. --
Mar 21 10:12:26 VMOS sshd[767024]: DBG|operate_common.h|55|MakeNslcdInteraction|action=1001, interaction ok
Mar 21 10:12:26 VMOS sshd[767024]: DBG|operate_common.h|55|MakeNslcdInteraction|action=5003, interaction ok
Mar 21 10:12:26 VMOS sshd[767024]: Authentication refused: bad ownership or modes for directory /data/home/user
Mar 21 10:12:26 VMOS sshd[767031]: DBG|operate_common.h|55|MakeNslcdInteraction|action=80003, interaction ok
Mar 21 10:12:31 VMOS sshd[767031]: pam_tsso(sshd:auth): Authentication failure for user from xx.xx.xx.xx
可以看到這句 Authentication refused: bad ownership or modes for directory /data/home/user
,即 user
文件夾的 modes (權限)是不正確的,拒絕了 SSH 訪問。
按照上面第三條所示,修改 /data/home/user
的權限,即可完美解決