成功聯繫 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
我將包含任何其他可能有用的資訊,請問:)
我已經研究了一天多,我發現了幾十個“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