Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux SSH 登錄「Access Denied」終極排查:從權限到 sshd_config 隱藏陷阱

編輯:Linux 系統常見問題解答

SSH 登錄明明密碼正確,卻反復提示 Permission denied 或 Access Denied,SCP 傳輸同樣失效。本文記錄一次真實排查全過程,揭示 /etc/ssh/sshd_config 中 AllowUsers 指令的隱形封鎖,提供系統化排查清單。

故障現象

  • SSH 密碼驗證失敗:Permission denied, please try again.
  • SCP 同樣報錯,修改密碼(passwd)無效。
  • Putty 連接同樣提示 Access Denied。
  • 新建普通用戶並授予 root 權限可正常登錄,僅 root 失效。

常規排查路徑(均無效)

  1. 目錄權限:檢查 /home、/root 權限,嘗試用 /tmp 中轉 —— 無效。
  2. PermitRootLogin:確認 sshd_config 中 PermitRootLogin yes —— 已開啟。
  3. 密碼/影子文件權限:/etc/passwd 644、/etc/shadow 000 —— 正常。
  4. SELinux/防火牆:臨時關閉 —— 無效。
  5. SSH 金鑰驗證:嘗試密鑰登錄 —— 同樣失敗。

破局關鍵:AllowUsers 指令

仔細閱讀 /etc/ssh/sshd_config 末尾,發現:

AllowUsers user1 user2

機制:AllowUsers 為白名單機制,僅列表中的用戶允許 SSH 登錄,未列入者(包括 root)直接拒絕,優先級高於 PermitRootLogin。

解決方案

  1. 編輯配置:vim /etc/ssh/sshd_config
  2. 在 AllowUsers 後追加 root:AllowUsers user1 user2 root
  3. 重啟服務生效:systemctl restart sshd(或 /etc/init.d/sshd restart)
/etc/init.d/sshd restart

驗證:SSH 登錄、SCP 傳輸均恢復正常。

系統化排查清單(下次直達本質)

層級檢查項命令/文件典型誤區
網絡端口通達性telnet IP 22 / nc -zv IP 22防火牆/安全組未放行 22
服務sshd 運行狀態systemctl status sshd服務未啟/端口被佔用
配置
認證
密碼驗證開關PasswordAuthentication yes被改為 no 僅允許密鑰
Root 登錄開關PermitRootLogin yes/prohibit-password/noprohibit-password 僅允許密鑰
用戶白名單AllowUsers / AllowGroups隱形封鎖 root/其他用戶,優先級最高
用戶黑名單DenyUsers / DenyGroups誤將 root 加入黑名單
賬號賬號鎖定/過期passwd -S root / chage -l root密碼過期、賬號鎖定
文件
權限
家目錄/密鑰權限~/.ssh 700, authorized_keys 600權限過寬導致密鑰被忽略
日志認證失敗詳情journalctl -u sshd -f / /var/log/secure只看現象不看日志
SELinux上下文標籤restorecon -Rv ~/.ssh家目錄遷移後上下文錯誤

最佳實踐建議

  1. 生產環境禁用 root 密碼登錄:PermitRootLogin prohibit-password + 密鑰認證。
  2. 使用 AllowGroups 替代 AllowUsers:將允許 SSH 登錄的用戶加入 sshlogin 組,配置 AllowGroups sshlogin,用戶管理解耦配置文件。
  3. 配置變更必須測試:sshd -t 語法檢查,修改後保持一個會話開啟再重啟服務,防止把自己鎖在外面。
  4. 審計日志歸檔:配置 rsyslog/journald 持久化存儲 /var/log/secure,便於事後追溯。
Copyright © Windows教程網 All Rights Reserved