如何修復 Linux 上的“權限被拒絕(公鑰)”SSH 錯誤?
SSH 是連接到遠程計算機的有用工具,但您可能會遇到涉及 Linux 上的公鑰的“權限被拒絕(公鑰)”錯誤。幸運的是,您可以嘗試一些簡單的修復方法來排除故障。
什麼是公鑰?
在 Linux 上生成 SSH 密鑰對涉及創建公鑰及其相應的私有密鑰。私鑰由用戶精心保管,而公鑰則傳輸到遠程服務器以方便安全登錄,無需密碼。嘗試建立連接時,本地系統上的 SSH 客戶端會根據用戶持有的私鑰驗證公鑰的真實性。
這種方法的主要好處在於公開密鑰就足夠了。只要一個人保持私鑰的機密性,即使他們的公鑰被洩露,他們仍然受到保護,因為如果沒有前者,後者將毫無結果。
為了使流行的開源客戶端和服務器解決方案 OpenSSH 正常運行,必須向位於用戶主目錄 (.ssh/authorized\_keys) 中的特定文件授予特定權限。具體來說,該文件不應為所有者之外的任何用戶配置寫入權限,稱為“全局可寫”,否則係統將無法正常運行。值得注意的是,由於目錄名稱之前存在前導點,該文件不會出現在使用常規命令(例如“ls”)的標准文件列表中,因此需要使用更具包容性的命令“ls-A”,後跟“.
當文件從一台設備傳輸到另一台設備或在當前系統上創建時,可能會修改權限。然而,調整這些設置是毫不費力的,並且可以迅速完成。
檢查您的公鑰權限
授權密鑰文件是一個文本文件,其中包含希望允許訪問其在遠程系統上的帳戶的客戶端的公鑰。為了查看其權限,使用“ls”命令和“-l”選項就足夠了。
ls -l ~/.ssh/authorized_keys
當前配置展示了適用於所有者、組件和其他用戶的授權參數。仔細檢查標籤的最後六個字符非常重要。其中“w”的存在意味著集體或不特定的個人被賦予了在其上刻字的權力,從而使該安排容易受到安全風險的影響。
為了授予自己寫入特定文件的權限,同時限制同一組內和組外的其他用戶的訪問權限,您可以在終端中使用“chmod”命令。這將允許您相應地修改文件的權限,確保只有授權的個人才能訪問該文件。
有兩種方式:數字方式和符號方式。
另一種方法涉及利用數值來表示文件權限,這需要記住特定權限的八進制編號。
chmod 700 ~/.ssh/authorized_keys
符號化的方法更加助記:
chmod go-w ~/.ssh/authorized_keys
使用 ssh-agent 安全複製密鑰
強烈建議使用 ssh-agent 程序來保護敏感信息,例如 SSH 身份驗證中使用的私鑰。此方法無需手動輸入命令行命令,也無需擔心直接複製並粘貼到授權密鑰文件時可能出現的潛在權限問題。
要啟動 ssh-agent,請使用以下命令:
eval "$(ssh-agent-s)"
要通過命令行界面使用 SSH 代理訪問遠程服務器,請在“ssh”命令旁邊使用“-A”選項。
ssh -A [email protected]
檢查遠程服務器的 sshd 設置
如果我們之前的建議無法解決問題,一種可能的做法是調整遠程設備上 sshd 服務器的設置(前提是您擁有管理權限)。但是,這應該被視為最後的手段,因為進行此類修改可能會損害系統的安全性。如果您無法直接修改配置,則需要向指定的系統管理員尋求幫助,以解決與建立 SSH 連接相關的任何持續問題。
包含 SSH 守護程序 (sshd) 全局設置的文件位於“/etc/ssh/sshd\_config”。它由 root 用戶擁有,需要管理權限才能訪問或修改。要使用 Vim 文本編輯器進行編輯,可以執行命令“sudo vim/etc/ssh/sshd\_config”,然後按 Enter 鍵。
sudo vim /etc/ssh/sshd_config
為了讓 sshd 在存在可公開訪問的授權 \_keys 文件的情況下允許登錄,需要通過將“StrictModes”參數設置為“no”來配置服務器的配置文件。
保存並重新啟動 SSH 服務器:
sudo systemctl restart sshd.service
現在您可以修復 SSH 公鑰權限錯誤
當外部系統上出現與 SSH 公鑰相關的問題時,驗證和調整文件權限通常足以確保密鑰的排他性。此外,利用 ssh-agent 可以在連接過程中提供增強的安全性。然而,如果有必要,放鬆 SSH 服務器的剛性可以被視為最後的手段。