成功联系 ssh-agent 后,PAM 无法验证 sudo

成功联系 ssh-agent 后,PAM 无法验证 sudo

在 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

我将提供任何可能有帮助的其他信息,请询问:)

我已经研究了一天多了,我发现了几十个sudo使用密钥设置 PAM 身份验证的“howtos” ssh,它们都很相似......但我找不到任何可以阐明原因的内容成功联系/通信后,PAM 身份验证失败ssh-agent

提前致谢!

更新

ssh-add在客户端,这就是窍门。我不是“ssh 高级用户”,但这给了我找出根本原因所需的信息。谢谢!

答案1

配置没问题,但是您需要拥有一些身份才能ssh-agent授权sudo操作。您可以使用以下方式验证您的代理是否具有某些身份

ssh-add -L

它应该打印代理中的公钥,并且其中至少一个应该与服务器上的公钥相匹配/etc/security/authorized_keys

如果代理没有任何身份,您需要将其添加到您的计算机上,再次使用

ssh-add [path/to/key]

并在出现提示时插入您的密码。

答案2

我已将其添加.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

相关内容