我使用 Putty 通过 SSH 登录到各种 Linux 机器(主要是 CentOS 和 Ubuntu)。我使用 SSH 密钥身份验证,而密钥存储在 Keepass 2.x 中并通过Keeagent插件(基本上是选美的替代品)移交给 Putty。到目前为止工作正常。
但是登录时,使用sudo
需要我输入密码。有办法解决吗?那么,通过 SSH 密钥登录时,sudo 不需要密码吗?
6年前有一个非常相似的问题:sudo: don't ask password when logged in with ssh key 。给定的答案并不是真正的答案,而是使用 ssh 密钥登录并直接使用 root 登录的解决方法。有各种理由不这样做。
如果您可以使用 SSH 代理转发,实际上有一种方法:(
pam_ssh_agent_auth.so
来源此处)是一个 PAM 模块,可以满足您的要求。它在 Debian 和 Ubuntu 中以 packagelibpam-ssh-agent-auth
和 CentOS package的形式提供pam_ssh_agent_auth
。安全注意事项
正如开发人员所说,您应该评估使用 SSH 代理转发的风险:
如果您确保您的 KeeAgent 具有选项始终需要在客户端程序请求使用密钥集时进行确认,这甚至可以为您提供一定程度的保护,以防止在远程主机上具有 root 访问权限的其他人:如果您收到 SSH 密钥请求确认对话框没有明显的原因,您会知道有人试图滥用您的 SSH 代理连接。
如果您还确保在离开时始终锁定 KeePass 和/或工作站屏幕,我认为这应该提供相当好的安全性;它肯定比使用
NOPASSWD
in更安全sudoers
。这也比只允许root
使用 ssh 密钥登录并将允许以 root 身份登录的每个人添加到 root 的authorized_keys
文件中要好,因为它保持了 sudo 的优点。用法
要使用它,您基本上将其添加为第一
auth
行/etc/pam.d/sudo
:执行此操作的简单 sed 命令(将其添加到第二行,因为第一行是注释):
sudo
然后以/etc/security/authorized_keys
通常的单行 OpenSSH 兼容格式添加应该被授权使用 SSH-authenticated 的用户的公共 SSH 密钥。SSH_AUTH_SOCK
然后通过编辑 sudoers 文件(使用visudo
)配置 sudoers 以保留环境变量。将此行添加到其他部分Defaults
。然后,您需要确保您的 ssh 客户端允许代理转发。在 PuTTY 中,您需要检查以下内容:
使用命令行 ssh 时,您需要指定
-A
参数,例如:在测试这个时,不要忘记用 . 终止你的 sudo 会话
sudo -k
。