Root 用户无法通过 SSH 登录的问题及解决方案

在 Linux 系统中,root 用户通常拥有最高的权限,允许进行系统级别的配置和操作。然而,出于安全考虑,很多 Linux 系统默认会禁用 root 用户通过 SSH 登录。如果您在使用 root 用户登录 SSH 时遇到问题,本篇博文将帮助您解决这一问题,并详细介绍如何配置防火墙(尤其是使用 IPT 防火墙时)确保 SSH 服务顺利运行。

1. 检查 SSH 服务配置

默认情况下,Linux 系统可能会禁止 root 用户通过 SSH 登录。这是出于安全性考虑,因为直接以 root 身份登录会增加暴力破解的风险。

1.1 检查 sshd_config 配置文件

要允许 root 用户通过 SSH 登录,首先需要编辑 SSH 配置文件 /etc/ssh/sshd_config

sudo nano /etc/ssh/sshd_config

找到以下配置项:

#PermitRootLogin prohibit-password

将其修改为:

PermitRootLogin yes

或者,如果您希望仅允许通过密钥认证登录,可以设置为:

PermitRootLogin without-password
  • yes:允许使用密码或密钥认证登录。
  • without-password:仅允许密钥认证,禁止密码认证。
  • prohibit-password:禁止通过密码认证登录,仅允许密钥认证。

修改完成后,保存文件并退出编辑器(按 Ctrl+O 保存,Ctrl+X 退出)。

1.2 重启 SSH 服务

配置更改后,您需要重启 SSH 服务才能使更改生效:

sudo systemctl restart ssh

2. 检查 IPT 防火墙配置

如果您的系统使用的是 IPT(iptables)防火墙,确保防火墙规则允许 SSH 服务通过。默认情况下,iptables 可能会阻止外部访问 SSH 服务,特别是在新配置的服务器上。

2.1 查看当前防火墙规则

首先,检查当前防火墙规则,以确认是否已允许端口 22(SSH 默认端口)通过:

sudo iptables -L

您应该能看到类似以下的输出,其中包括允许 22 端口的规则:

ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh

如果没有显示允许端口 22 的规则,您需要手动添加规则。

2.2 添加允许 SSH 通过的规则

如果没有找到允许 SSH 的规则,可以使用以下命令添加规则:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

这条命令会将一条规则添加到 INPUT 链中,允许所有来自外部的 TCP 流量访问端口 22(SSH)。

2.3 保存防火墙配置

如果您希望防火墙在系统重启后依然保持这些规则,需要保存当前的防火墙规则。使用以下命令保存:

Debian/Ubuntu 系列系统:

sudo iptables-save > /etc/iptables/rules.v4

CentOS/RHEL 系列系统:

sudo service iptables save

2.4 检查防火墙状态

使用以下命令确认防火墙规则已经生效:

sudo iptables -L

确保您能看到类似以下的规则:

ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh

3. 其他可能的原因

3.1 检查 SSH 服务端口

如果您修改了 SSH 服务的默认端口(22),确保防火墙允许新的端口通过。例如,假设您的 SSH 配置文件 /etc/ssh/sshd_config 中将端口修改为 2222:

Port 2222

在这种情况下,您需要允许端口 2222 通过防火墙:

sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

3.2 检查 SELinux 状态

在某些系统(如 CentOS/RHEL)中,SELinux 可能会限制 SSH 访问。您可以通过以下命令检查 SELinux 的状态:

sestatus

如果 SELinux 启用了并限制了 SSH 访问,可以暂时禁用 SELinux 或调整相关规则以允许 SSH 登录。


4. 测试 SSH 登录

配置完成后,您可以尝试通过 SSH 登录到服务器。使用以下命令:

ssh root@your_server_ip

如果一切配置正确,您将能够成功登录到系统。如果仍然无法登录,请再次检查 SSH 配置文件和防火墙设置。

5. 总结

如果您遇到 root 用户无法通过 SSH 登录的问题,通常是由于 SSH 服务的配置问题或防火墙的访问控制导致的。通过调整 /etc/ssh/sshd_config 文件、配置 IPT 防火墙规则,您可以解决这个问题并确保 root 用户能够顺利通过 SSH 登录。

为了保证系统安全,建议:

  • 使用密钥认证而非密码认证;
  • 禁用不必要的 root 登录;
  • 配置防火墙并定期审查系统设置。
最后修改:2024 年 12 月 09 日
赞赏必须赞赏,多多益善,老板一直发大财!