mas*_*sgo 5 ssh sudo putty key-authentication
我使用 Putty 通过 SSH 登录到各种 Linux 机器(主要是 CentOS 和 Ubuntu)。我使用 SSH 密钥身份验证,而密钥存储在 Keepass 2.x 中并通过 tha Keeagent插件(基本上是选美的替代品)移交给 Putty 。到目前为止工作正常。
但是登录时,使用sudo需要我输入密码。有办法解决吗?那么,当通过 SSH 密钥登录时,sudo 不需要密码吗?
6 年前有一个非常相似的问题:sudo: don't ask password when login with ssh key 。给出的答案并不是真正的答案,而是一种使用 ssh 密钥登录并直接使用 root 登录的解决方法。不这样做的原因有很多。
如果您可以使用 SSH 代理转发,实际上有一种方法:(pam_ssh_agent_auth.so 来源here)是一个 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
Run Code Online (Sandbox Code Playgroud)
您应该评估使用 SSH 代理转发的风险,正如开发人员所说:
当然有一些警告,ssh-agent 转发有其自身的安全风险,必须针对您的环境仔细考虑。如果没有不可信的中间服务器,并且您希望保留特权命令调用的可追溯性、问责制和必需的身份验证,则收益应大于风险。
如果您确保您的 KeeAgent 具有客户端程序请求使用密钥集时始终需要确认的选项,这甚至可以为您提供一定程度的保护,以防止在远程主机上具有 root 访问权限的其他人:如果您收到 SSH 密钥请求确认对话框没有明显的原因,您会知道有人试图滥用您的 SSH 代理连接。
如果您还确保在离开时始终锁定 KeePass 和/或工作站屏幕,我认为这应该提供相当好的安全性;它肯定比使用NOPASSWDin更安全sudoers。这也比只允许root使用 ssh 密钥登录并将允许以 root 身份登录的每个人添加到 rootauthorized_keys文件中要好,因为它保持了 sudo 的优点。
要使用它,您基本上将其添加为以下内容的第一auth行/etc/pam.d/sudo:
auth sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys
Run Code Online (Sandbox Code Playgroud)
执行此操作的简单 sed 命令(将其添加到第二行,因为第一行是注释):
sed -i '2 i\auth sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys' /etc/pam.d/sudo
Run Code Online (Sandbox Code Playgroud)
然后sudo以/etc/security/authorized_keys通常的单行 OpenSSH 兼容格式添加应该被授权使用 SSH 身份验证的用户的公共 SSH 密钥。
然后SSH_AUTH_SOCK通过编辑 sudoers 文件(使用visudo)配置 sudoers 以保留环境变量。将此行添加到带有其他Defaults.
Defaults env_keep += "SSH_AUTH_SOCK"
Run Code Online (Sandbox Code Playgroud)
然后,您需要确保您的 ssh 客户端允许代理转发。在 PuTTY 中,您需要检查:
在测试时,不要忘记使用sudo -k.
| 归档时间: |
|
| 查看次数: |
3681 次 |
| 最近记录: |