解決存取權問題
本頁面提供 Bare Metal 解決方案存取問題的疑難排解提示。
請前往已知問題和限制頁面,查看您的問題是否已解決。
SSH 用戶端無法連線
如果 SSH 用戶端無法連線至伺服器,您可能會看到下列錯誤訊息之一:
connection timeout
或connection refused
:SSH 用戶端無法連線。Permission denied (publickey)
:SSH 用戶端無法驗證。
如要診斷 SSH 連線失敗的原因,請按照下列步驟操作:
測試連線。
請使用
ping
、traceroute
和nc
指令,確認主機可供存取,且 SSH 通訊埠 (22) 已開啟。ping SERVER_NAME
traceroute SERVER_NAME
echo "" | nc SERVER_NAME 22
如果這麼做還是無法解決問題,則問題可能出在網路層,而非 SSH。
檢查用戶端偵錯輸出內容。
開啟 SSH 通訊協定的詳細資訊。
ssh -v SERVER_NAME -i ~/.ssh/id_ecdsa
這項指令會列印偵錯輸出內容,顯示用戶端 SSH 通訊協定的重點事件。
以下範例輸出內容顯示用戶端傳送了金鑰,但伺服器拒絕了。伺服器要求驗證程序繼續使用其他公開金鑰,但用戶端沒有其他金鑰可提供。
.. .. .. debug1: Server host key: ecdsa-sha2-nistp256 SHA256:V9cRYdqcAJv+RPfN+oofNTVdUxs6VlocP4uMWOxeGKI debug1: Host 'bms-server' is known and matches the ECDSA host key. debug1: Found key in /root/.ssh/known_hosts:1 debug1: rekey after 134217728 blocks debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS received debug1: rekey after 134217728 blocks debug1: SSH2_MSG_EXT_INFO received debug1: kex_input_ext_info: server-sig-algs=
debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey debug1: Next authentication method: publickey debug1: Offering ECDSA public key: /root/.ssh/id_ecdsa debug1: Authentications that can continue: publickey debug1: No more authentication methods to try. Permission denied (publickey). 如果 SSH 詳細輸出內容未清楚指出錯誤訊息的原因,請執行
strace
指令:strace ssh SERVER_NAME -i ~/.ssh/id_ecdsa > strace-ssh.txt 2>&1
檢查
strace
輸出內容,找出與核心問題相關的錯誤。在某些情況下,您可能無法透過用戶端偵錯輸出內容找出問題。您可能還需要執行伺服器端追蹤,才能找出錯誤。在您無法透過 SSH 連線至伺服器之前,請使用互動式序列主控台執行後續步驟。
檢查伺服器端偵錯輸出內容。
找出目前的 SSH 設定。
grep -v "^#" /etc/ssh/sshd_config | grep -v "^$"
如要取得 SSH 的詳細資訊,請在
/etc/ssh/sshd_config
檔案中設定下列參數。SyslogFacility AUTH LogLevel DEBUG
如要套用變更,請重新啟動服務。
service sshd restart
在用戶端端執行
ssh
指令,並從記錄中擷取sshd
訊息:grep sshd /var/log/messages
或者,您也可以使用下列指令,匯出指定時間範圍內的所有相關訊息:
journalctl -u sshd -S "START_TIME" -U "END_TIME" --utc
更改下列內容:
START_TIME
:時間範圍的開始時間,格式為yyyy-mm-dd hh:mm:ss
。END_TIME
:時間範圍的結束時間,格式為yyyy-mm-dd hh:mm:ss
。
範例:
journalctl -u sshd -S "2023-04-25 18:38:00" -U "2023-04-25 18:40:00" --utc
如要修正這些問題,請考慮採取下列步驟:
確認用戶端金鑰檔案是否已設為唯讀權限 (標記
400
)。否則,SSH 用戶端不會接受該檔案。如要為使用中的私密金鑰設定唯讀標記,請執行下列指令:
chmod 400 ~/.ssh/id_ed25519
在伺服器端,檢查對應使用者的本機設定檔 (
~/.ssh/authorized_keys
) 中是否指定了用戶端公開金鑰。在某些情況下,問題可能與 SSH 通訊協定版本或 SSH 演算法有關。伺服器端和用戶端的偵錯輸出內容可能會指出這類問題。通常,
ssh
和sshd_config
的man
頁面會提供詳細資訊,說明如何維護必要的設定。舉例來說,如要查看系統支援的金鑰交換演算法或密碼,請使用下列指令:# Find key exchange algorithms ssh -Q kex # Find the symmetric encryption ciphers ssh -Q cipher