Ssh

使用 SSH 密鑰身份驗證和 Keepass+Putty 時的 sudo 身份驗證

  • September 24, 2021

我使用 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 和/或工作站螢幕,我認為這應該提供相當好的安全性;它肯定比使用NOPASSWDin更安全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

引用自:https://unix.stackexchange.com/questions/520098