我使用 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 和/或工作站屏幕,我认为这应该提供相当好的安全性;它肯定比使用NOPASSWD
in更安全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 中,您需要检查以下内容:
使用命令行 ssh 时,您需要指定-A
如下参数:
ssh -A [email protected]
在测试时,不要忘记使用 终止 sudo 会话sudo -k
。