我有一個在 Amazon EC2 執行個體上的雲端中運行的應用程式實例,我需要從本地 Ubuntu 連接到它。它在一臺本地 ubuntu 和筆記型電腦上運行良好。Permission denied (publickey).
當嘗試從 SSH 到 EC2 時,我收到此訊息不同的本地Ubuntu。
我認為 Amazon EC2 上的安全性設定可能存在問題,它限制了對一個執行個體的 IP 存取;或者可能需要重新產生憑證。
有誰知道權限被拒絕錯誤的解決方案?
答案1
在這種情況下要做的第一件事是使用 選項-v
,ssh
以便您可以查看嘗試了哪些類型的身份驗證以及結果是什麼。這有助於闡明情況嗎?
在您對問題的更新中,您提到「在另一個本地 Ubuntu 上」。您是否已將 ssh 私鑰複製到另一台機器上?
答案2
由於沒有明確提及,sshd 預設對authorized_keys
檔案的權限非常嚴格。所以,如果authorized_keys
是可寫對於用戶以外的任何人或可以寫由使用者以外的任何人進行,它將拒絕進行身份驗證(除非 sshd 配置為StrictModes no
)
我所說的「可以寫」的意思是,如果任何父目錄對於使用者以外的任何人都是可寫的,則允許修改這些目錄的使用者可以開始修改權限,以便他們可以修改/替換authorized_keys。
此外,如果該/home/username/.ssh
目錄不屬於用戶,因此用戶無權讀取金鑰,您可能會遇到問題:
drwxr-xr-x 7 jane jane 4096 Jan 22 02:10 /home/jane
drwx------ 2 root root 4096 Jan 22 03:28 /home/jane/.ssh
請注意,jane 不擁有該.ssh
文件。透過修復此問題
chown -R jane:jane /home/jane/.ssh
這些類型的檔案系統權限問題不會顯示出來ssh -v
,它們甚至不會顯示在 sshd 日誌中 (!),直到您將日誌等級設為 DEBUG。
- 編輯
/etc/ssh/sshd_config
。你想要一條LogLevel DEBUG
可以在某處讀取的行。使用發行版提供的機制重新載入 SSH 伺服器。 (service sshd reload
在 RHEL/CentOS/Scientific 上。)優雅的重新載入不會刪除現有會話。 - 再次嘗試進行身份驗證。
- 找出您的身份驗證設施日誌的位置並讀取它們。 (IIRC,
/var/log/auth.log
基於 Debian 的發行版;/var/log/secure
RHEL/CentOS/Scientific。)
更容易找出偵錯輸出出了什麼問題,其中包括檔案系統權限錯誤。請記住將變更恢復到/etc/ssh/sshd_config
完成後的狀態!
答案3
我收到此錯誤,因為我忘記添加-l
選項。我的本機使用者名稱與遠端系統上的使用者名稱不同。
這並不能回答你的問題,但我來這裡是為了尋找我的問題的答案。
答案4
ssh -v
比(當然在我看來)更容易閱讀的東西是tail -f /var/log/auth.log
。在嘗試連接時,它應該在您嘗試連接的伺服器上運行。它將以純文字形式顯示錯誤。
這幫助我解決了我的問題:
不允許來自 xx.yy.com 的使用者 [使用者名稱],因為AllowGroups 中沒有列出任何使用者群組