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


49

我对上的某些ssh服务器配置有疑问/etc/ssh/sshd_config。我想要下一个行为:

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

如果我设置PasswordAuthentication no了第一点,第二点就不满意了。有没有一种方法只能设置PasswordAuthentication no为root?

Answers:


78

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

指定root是否可以使用ssh(1)登录。参数必须为“是”,“无密码”,“仅强制命令”或“否”。默认值为“是”。

如果此选项设置为“ without-password”,则root用户的密码身份验证被禁用。

以下将完成您想要的:

PasswordAuthentication yes
PermitRootLogin without-password

1
我在Debian上尝试了此操作,并service ssh restart在服务器上进行了验证,然后在客户端上尝试使用我的密钥进行连接,ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no root@host而实际上我无法使用密码登录,但可以使用root用户的密钥登录。
巴斯天

是的,但是如果您只是这样做,则可以使用密码登录:ssh -o PreferredAuthentications=password root@host不是特别安全的恕我直言
geoidesic'Apri

2
在2019年是“ PermitRootLogin禁止密码”,旧的无密码是已弃用的别名。
vbraun

10

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

PasswordAuthentication yes
PermitRootLogin yes

Match User root
PasswordAuthentication no

3
我设法将我锁定在ssh服务器之外。
理查德·梅茨勒

如果您不希望为root出现密码提示,这似乎是最好的方法。
狮子座

这也把我拒之门外。我认为可能顺序错误……
加里(Gary

3

我在授予我的服务器上的root权限时采用了更为严格的方法,这对于像我这样的偏执狂可能很有趣。请注意您的操作和操作顺序,否则可能会导致无法获得root用户访问权限。

  • 创建一个特定的组sugroup,将允许whos成员成为root并仅通过 sshd_confid 末尾放置以下几行来允许对此组进行密钥身份验证:

Match Group sugroup

PasswordAuthentication no

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

使用此配置,必须使用密钥身份验证和密码才能成为root用户。我这样配置服务器,因为无论身份验证方法如何,我都希望不通过ssh直接进行根访问。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.