如何在服务器上禁用以root身份进行远程SSH登录?

为了安全起见,我的公司希望我不允许任何人通过SSH远程登录到我们的Ubuntu服务器作为root用户。我们仍然希望root账户存在,只是不希望它能够被远程登录。我该如何实现这个目标?
非常感谢您提前的时间。
3个回答

我猜你是指通过SSH登录?请将以下行添加到/etc/ssh/sshd_config文件中:
PermitRootLogin no

如果你想拒绝某些用户登录,请将以下内容放入配置文件中:
DenyUsers root

这是采用黑名单的方法。白名单通常更可取。如果您的公司需要允许“rob”和“admin”用户登录服务器,请使用以下配置指令:
AllowUsers rob admin

在进行配置文件更改后,使用以下命令重新启动ssh服务:
sudo service ssh restart

请参阅手册页面

14并且 sudo service ssh restart 生效 - Maxim Yefremov
我找不到sshd_config文件,我看到的是这个/etc/ssh/ssh_config。 - Chinmaya B
@ChinmayaB 你可能还没有安装OpenSSH服务器。尝试使用 sudo apt-get install openssh-server 安装一下吧。 - Lekensteyn
值得一提的是,在禁用root用户的ssh之前,您首先需要配置普通用户的ssh。 - heroin

编辑文件/etc/ssh/sshd_config,查找
PermitRootLogin

并将其设置为no


如果您在不添加任何用户的情况下执行此操作,即 AllowUsers <用户名>,那么实际上将不允许任何人通过SSH登录。 - JGlass
1@JGlass 你可能把这个答案和上面的那个混淆了,上面的答案有额外的选项 - 这一行只是禁止root通过SSH登录。如果系统上还有其他用户,并且其他条件都相同,他们仍然可以通过SSH登录,除非你也将这些登录用户列入DenyUsers - armadadrive
@armadadrive - 啊,谢谢你的纠正和解释! - JGlass

默认配置是将root账户锁定,因此无法远程登录为root。除非您还想通过使用RSA密钥确保无法远程登录为root,否则无需进行其他操作。当然,如果您不想这样做,那就不要设置root密钥即可。

2这不是我的Linode Ubuntu 14.04机器的默认设置。PermitRootLogin被设置为yes,并且没有AllowUsersDenyUsers配置行。除非我漏掉了什么,否则我认为假设它默认是锁定的是不安全的。 - andrewtweber
@andrewtweber,通过ssh配置文件禁止了root登录,但是通过将root密码设置为无效值来全局禁止root登录,这样你就无法输入密码进行登录。因此,正如我所说的,你仍然可以使用RSA密钥以root身份进行ssh登录,只是不能使用密码登录。 - psusi
好的,谢谢。你能把这个解释加到你的回答里面吗?这样我就可以取消我的负评了。 - andrewtweber
@andrewtweber,这已经在我的回答中了。 - psusi
1你对root账户被锁定的解释并没有在你的回答中提到。无论如何,除非你的回答被编辑过,否则我无法取消我的负评,所以如果你愿意固执下去,就继续吧。 - andrewtweber
1这个回答太糟糕了,它假设了一些可能无效的内容,对于想要学习的人没有帮助,而且如果有人真正需要手动锁定 root,它也没有帮助。总体来说,这不是一个有效的回答。 - Tarick Welling