使用 SSH 密鑰身份驗證和 Keepass+Putty 時的 sudo 身份驗證
我使用 Putty 通過 SSH 登錄到各種 Linux 機器(主要是 CentOS 和 Ubuntu)。我使用 SSH 密鑰身份驗證,而密鑰儲存在 Keepass 2.x 中並通過Keeagent外掛(基本上是選美的替代品)移交給 Putty。到目前為止工作正常。
但是登錄時,使用
sudo
需要我輸入密碼。有辦法解決嗎?那麼,通過 SSH 密鑰登錄時,sudo 不需要密碼嗎?6年前有一個非常相似的問題:sudo: don’t ask password when logged in with ssh key 。給定的答案並不是真正的答案,而是使用 ssh 密鑰登錄並直接使用 root 登錄的解決方法。有各種理由不這樣做。
如果您可以使用 SSH 代理轉發,實際上有一種方法:(
pam_ssh_agent_auth.so
來源此處)是一個 PAM 模組,可以滿足您的要求。它在 Debian 和 Ubuntu 中以 packagelibpam-ssh-agent-auth
和 CentOS package的形式提供pam_ssh_agent_auth
。# Debian/Ubuntu: apt update; apt install libpam-ssh-agent-auth # CentoOS yum install pam_ssh_agent_auth
安全注意事項
正如開發人員所說,您應該評估使用 SSH 代理轉發的風險:
當然有一些警告,ssh-agent 轉發有它自己的安全風險,必鬚根據您的環境仔細考慮。如果沒有不可信的中間伺服器,並且您希望保留可追溯性、問責制和特權命令呼叫所需的身份驗證,則收益應大於風險。
如果您確保您的 KeeAgent 具有選項始終需要在客戶端程序請求使用密鑰集時進行確認,這甚至可以為您提供一定程度的保護,以防止在遠端主機上具有 root 訪問權限的其他人:如果您收到 SSH 密鑰請求確認對話框沒有明顯的原因,您會知道有人試圖濫用您的 SSH 代理連接。
如果您還確保在離開時始終鎖定 KeePass 和/或工作站螢幕,我認為這應該提供相當好的安全性;它肯定比使用
NOPASSWD
in更安全sudoers
。這也比只允許root
使用 ssh 密鑰登錄並將允許以 root 身份登錄的每個人添加到 root 的authorized_keys
文件中要好,因為它保持了 sudo 的優點。用法
要使用它,您基本上將其添加為第一
auth
行/etc/pam.d/sudo
:auth sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys
執行此操作的簡單 sed 命令(將其添加到第二行,因為第一行是註釋):
sed -i '2 i\auth sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys' /etc/pam.d/sudo
sudo
然後以/etc/security/authorized_keys
通常的單行 OpenSSH 兼容格式添加應該被授權使用 SSH-authenticated 的使用者的公共 SSH 密鑰。
SSH_AUTH_SOCK
然後通過編輯 sudoers 文件(使用visudo
)配置 sudoers 以保留環境變數。將此行添加到其他部分Defaults
。Defaults env_keep += "SSH_AUTH_SOCK"
然後,您需要確保您的 ssh 客戶端允許代理轉發。在 PuTTY 中,您需要檢查以下內容:
使用命令行 ssh 時,您需要指定
-A
參數,例如:ssh -A user@example.com
在測試這個時,不要忘記用 . 終止你的 sudo 會話
sudo -k
。