在 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