Ubuntu

成功聯繫 ssh-agent 後,PAM 無法驗證 sudo

  • March 7, 2022

在 14.04.1-Ubuntu 伺服器 LTS 上sudo使用設置 PAM身份驗證。ssh-agent

我仍然無法使用 PAM 通過 ssh-agent 成功驗證 sudo。

這是我的相關/var/log/auth.log條目…

Jun 17 11:31:16 host sudo[21318]: pam_ssh_agent_auth: Beginning pam_ssh_agent_auth for user userName
Jun 17 11:31:16 host sudo[21318]: pam_ssh_agent_auth: Attempting authentication: `userName' as `userName' using /etc/security/authorized_keys
Jun 17 11:31:16 host sudo[21318]: pam_ssh_agent_auth: Contacted ssh-agent of user userName (1000)
Jun 17 11:31:16 host sudo[21318]: pam_ssh_agent_auth: Failed Authentication: `userName' as `userName' using /etc/security/authorized_keys

如您所見,它成功聯繫了ssh-agent,但隨後身份驗證失敗。PAM 回退到下一個身份驗證方法,並要求輸入 sudo/userName 密碼,然後我就可以繼續了。我正在嘗試對其進行配置,這樣您就不需要sudo密碼,只要您ssh使用授權密鑰進行連接即可。

以下是相關文件及其內容:

/etc/pam.d/sudo

#%PAM-1.0

auth       sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys debug
auth       required   pam_env.so readenv=1 user_readenv=0
auth       required   pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0

@include common-auth
@include common-account
@include common-session-noninteractive

/etc/security/authorized_keys文件資訊:該文件包含 4 個ssh-rsa公鑰。

-rw-r--r-- 1 root root 1597 Jun 16 16:07 /etc/security/authorized_keys

/etc/sudoers

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#

Defaults        env_keep += SSH_AUTH_SOCK

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

而且,為了理智,你可以看到SSH_AUTH_SOCK確實被sudo正確地“傳遞”了……

printenv | grep SSH

SSH_AUTH_SOCK=/tmp/ssh-m9Ume3GOIP/agent.15964

sudo printenv | grep SSH

SSH_AUTH_SOCK=/tmp/ssh-m9Ume3GOIP/agent.15964

我通過 ssh 進入伺服器

ssh -A host@ip_address

我將包含任何其他可能有用的資訊,請問:)

我已經研究了一天多,我發現了幾十個“howtos”來sudo使用ssh密鑰設置 PAM 身份驗證,它們都很相似……但我找不到任何可以說明原因的東西在成功聯繫/通信後,PAM 身份驗證失敗ssh-agent

提前致謝!

更新

ssh-add在客戶端,這是訣竅。我不是“ssh 超級使用者”,但這給了我找出根本原因所需的東西。謝謝!

配置沒問題,但是你需要有一些身份ssh-agent才能授權sudo操作。您可以使用以下方式驗證您的代理是否具有某些身份

ssh-add -L

它應該在您的代理中列印公鑰,並且其中至少一個應該與伺服器上的公鑰匹配/etc/security/authorized_keys

如果代理沒有任何身份,您需要將它們添加到您的電腦上,再次使用

ssh-add [path/to/key]

如果出現提示,請插入您的密碼。

我已經.bashrc在需要ssh-agent執行的使用者上添加了這個,我將它用於特殊的 ansible 使用者。我注意到很多ssh-agent過程,我試圖在每次登錄時保持它清潔以清理它。

為了清楚起見,ssh-agent必須在建立連接的伺服器上執行。

$HOME/.bashrc

CSSH=$(ssh-add -L 2>/dev/null |grep -c ssh-rsa)
if [ $CSSH -eq 0 ]; then
pkill ssh-agent
eval `ssh-agent -s`
ssh-add
else
echo "SSH agent already running"
fi

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