仅允许 root 通过基于密钥的身份验证通过 ssh 登录

mav*_*lan 67 ssh authentication

我对/etc/ssh/sshd_config. 我想要下一个行为:

  1. 公钥身份验证是以 root 身份进行身份验证的唯一方法(无密码身份验证或其他)
  2. 普通用户可以同时使用(密码和公钥认证)

如果我设置PasswordAuthentication no我的第一点是满意的,但不是第二点。有没有办法PasswordAuthentication no只为root设置?

jor*_*anm 99

您可以使用该PermitRootLogin指令执行此操作。从sshd_config联机帮助页:

指定 root 是否可以使用 ssh(1) 登录。参数必须是“yes”、“without-password”、“forced-commands-only”或“no”。默认值为“是”。

如果此选项设置为“without-password”,则对 root 禁用密码验证。

以下将完成您想要的:

PasswordAuthentication yes
PermitRootLogin prohibit-password
Run Code Online (Sandbox Code Playgroud)

来自OpenSSH 7.0 更新日志

PermitRootLogin 现在接受“prohibit-password”的参数作为“without-password”的更明确的同义词

  • 在 2019 年是“PermitRootLogin 禁止密码”,旧的无密码是不推荐使用的别名。 (10认同)

Gil*_*il' 11

您可以使用Match块为每个用户或组身份验证或每个 IP 地址或连接源的主机名配置一些选项。

PasswordAuthentication yes
PermitRootLogin yes

Match User root
PasswordAuthentication no
Run Code Online (Sandbox Code Playgroud)

  • 我设法将我锁定在我的 ssh 服务器之外。 (3认同)
  • 如果您不想出现 root 密码提示,这似乎是最好的方法。 (2认同)

sta*_*xyz 6

我有一种更严格的方法来授予我服务器上的 root 权限,这对于像我这样的偏执狂来说可能会很有趣。小心你做什么和按什么顺序,否则你最终可能会得到一个你无法获得 root 访问权限的系统。

  • 创建一个特定的组sugroup,通过sshd_confid的末尾添加以下几行允许 whos 的成员成为 root 并且只允许对该组进行密钥验证:

Match Group sugroup

PasswordAuthentication no

  • 将命令auth required pam_wheel.so group=sugroup放在/etc/pam.d/su. 它可能已经存在,您只需取消注释即可。这拒绝所有不是 sugroup 成员的用户的 root 访问权限
  • 选择一个强根密码:)
  • 检查您的新身份验证方法是否有效,并且仅在以下情况下:
  • 使用PermitRootLogin noin拒绝通过 ssh 直接 root 登录/etc/ssh/sshd_config

使用此配置必须使用密钥身份验证和密码才能成为 root。我像这样配置我的服务器,因为我更喜欢没有通过 ssh 的直接 root 访问,而不管身份验证方法如何。