使用 Keepass+Putty 进行 SSH 密钥身份验证时的 sudo 身份验证

使用 Keepass+Putty 进行 SSH 密钥身份验证时的 sudo 身份验证

我使用 Putty 通过 SSH 登录到各种 Linux 机器(主要是 CentOS 和 Ubuntu)。我使用 SSH 密钥身份验证,而密钥存储在 Keepass 2.x 中并通过 tha 移交给 Putty基代理插件(基本上是选美的替代品)。到目前为止工作正常。

但是登录后使用sudo需要输入密码。有办法解决吗?那么,通过 SSH 密钥登录时,sudo 不需要密码吗?


6年前有一个非常相似的问题:sudo:使用 ssh 密钥登录时不询问密码 。给出的答案并不是真正的答案,而是使用 ssh 密钥登录并直接使用 root 登录的解决方法。不这样做的原因有多种。

答案1

如果可以使用SSH代理转发,其实还有一个办法:pam_ssh_agent_auth.so (来源在这里)是一个 PAM 模块,可以满足您的要求。它在 Debian 和 Ubuntu 中以软件包libpam-ssh-agent-auth和 CentOS 软件包的形式提供pam_ssh_agent_auth

# Debian/Ubuntu:
apt update; apt install libpam-ssh-agent-auth
# CentoOS
yum install pam_ssh_agent_auth

安全考虑

您应该评估使用 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

一个简单的 sed 命令可以执行此操作(将其添加到第二行,因为第一行是注释):

sed -i '2 i\auth    sufficient      pam_ssh_agent_auth.so file=/etc/security/authorized_keys' /etc/pam.d/sudo

sudo然后以/etc/security/authorized_keys通常的单行 OpenSSH 兼容格式添加应被授权使用 SSH 身份验证的用户的公共 SSH 密钥。

SSH_AUTH_SOCK然后通过编辑 sudoers 文件(使用)来配置 sudoers 以保留环境变量visudo。将此行添加到具有其他行的部分Defaults

Defaults env_keep += "SSH_AUTH_SOCK"

然后,您需要确保您的 ssh 客户端允许代理转发。在 PuTTY 中,您需要检查以下内容:

Putty 代理转发设置

使用命令行 ssh 时,您需要指定-A如下参数:

ssh -A [email protected]

在测试时,不要忘记使用 终止 sudo 会话sudo -k

相关内容