我正在尝试配置用户将登录的服务器。用户将使用此服务器作为通过 ssh 跳转到其他服务器的框。从跳转服务器到其他服务器将使用基于 SSH 密钥的身份验证。用户不得直接登录其他服务器。因此,他们需要从跳转服务器转到其他服务器。用户帐户在所有其他服务器上都被锁定“usermod -L 用户名”。
我遇到一个问题,这些用户还需要能够在其他服务器上使用“sudo”。当前的问题是,当用户在其他服务器之一上尝试使用 sudo 时,他们在输入密码时会收到错误“抱歉,请重试”,即使密码正确。这是有道理的,因为我已锁定用户帐户,阻止直接 SSH 登录。用户在 sudoers 文件中。
有谁知道我该如何设置其他服务器,以便他们允许用户仅通过基于跳转服务器的密钥进行 SSH,并允许用户在其他服务器(非跳转)上使用 sudo。
非常感谢您的帮助,并感谢您的时间。
答案1
你可以实现SSH 代理转发。或者,如果您使用 jumphost 进行 SSH 访问,那么最好在其他服务器上使用 iptables 或 ufw 仅允许对特定 IP(即 jumphost ip 地址)进行 SSH 访问。
IPTABLES设置:
iptables -I INPUT -p tcp -s YourIP --dport 22 -j ACCEPT
UFW 的安装:
sudo apt-get install ufw
sudo ufw enable
sudo ufw allow from 15.15.15.51 to any port 22 ---- Change 15.15.15.51 to the jumphost IP Address
另外,在其他服务器上,编辑 sshd 配置并禁止 root 登录以更好地实现安全性。某些服务器 shell 不会自动询问密码。因此,您不妨安装“ask-pass”,以便用户可以使用他们的密码。
最后一件事,为了轻松管理此设置中的用户,请确保创建一个组并将其包含在 sudoers 中(无需密码),然后重新启动 SSH。此分组应在那些“其他服务器”上实现,而不是在 jumphost 服务器上实现
答案2
通过在 sshd_config 文件中添加以下匹配配置解决了此问题。此配置被放置在所有不允许直接访问的服务器上。
Match User user1,user2,user3
PasswordAuthentication no
现在,用户可以通过基于密钥的身份验证从跳转服务器访问目标服务器,他们无法直接使用 SSH 访问目标服务器,并且 sudo 仍然适用于目标服务器上的用户。