Ubuntu 24.04 开启root远程登录完全指南:密码与密钥双重认证

5,591 阅读8分钟

Ubuntu 24.04 LTS 默认出于安全考虑禁用了root用户的远程登录功能。然而在某些场景下(如开发测试环境、服务器维护等),我们需要开启root远程登录来简化系统管理工作。本文将详细介绍两种主要的认证方式:密码认证和SSH密钥认证,并提供完整的零基础操作指南。


一、环境准备和基础配置

1、检查系统版本

首先确认当前系统版本:

lsb_release -a
cat /etc/os-release

确保系统为Ubuntu 24.04 LTS(代号:Noble Numbat)。

2、检查SSH服务状态

查看SSH服务是否已安装并运行:

sudo systemctl status ssh

image.png

如上所示就是ssh存在的情况,如果SSH服务未安装,执行以下命令安装:

sudo apt update
sudo apt install openssh-server -y
sudo systemctl enable ssh
sudo systemctl start ssh

3、备份SSH配置文件

重要提醒:修改任何系统配置文件前都要备份!

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

如果配置出现问题,可以快速恢复:

sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config

二、密码认证登录

1、设置root密码

Ubuntu默认情况下root用户没有密码,需要先设置:

sudo passwd root

系统会提示输入新密码两次。密码设置建议:

  • 长度至少12位
  • 包含大写字母、小写字母、数字、特殊字符
  • 避免使用常见密码(如123456、password等)
  • 不要使用个人信息相关的密码

如果是内部测试环境,上面说的建议当作废话就行了

密码强度测试:

# 可以使用以下命令检查密码强度
sudo apt install pwgen -y
pwgen -s 16 1  # 生成一个16位的强密码供参考

2、修改SSH配置文件

编辑SSH主配置文件:

sudo nano /etc/ssh/sshd_config

保存文件(Ctrl+O → Enter → Ctrl+X)。

主要配置项说明:

找到以下配置项并修改(如果没有则添加):

# 基础配置
Port 22                          # SSH端口,默认22
PermitRootLogin yes             # 允许root登录
PasswordAuthentication yes       # 启用密码认证
PubkeyAuthentication yes        # 启用公钥认证(为后续密钥认证准备)

# 安全增强配置(可选)
MaxAuthTries 3                  # 最大认证尝试次数
ClientAliveInterval 300         # 客户端存活检测间隔(秒)
ClientAliveCountMax 2           # 最大客户端存活检测次数
LoginGraceTime 60               # 登录宽限时间(秒)

# 限制配置(可选)
AllowUsers root                 # 仅允许root用户登录(可根据需要调整)
# DenyUsers username            # 禁止特定用户登录

配置文件详细说明:

  • PermitRootLogin yes:允许root用户通过SSH登录
  • PasswordAuthentication yes:启用密码认证方式
  • MaxAuthTries 3:限制登录尝试次数,防止暴力破解
  • ClientAliveInterval 300:每5分钟检测一次客户端连接状态
  • LoginGraceTime 60:用户必须在60秒内完成认证

3、验证配置文件语法

保存文件后,检查配置语法是否正确:

sudo sshd -t

如果没有任何输出,说明配置正确。如果有错误,会显示具体的错误信息。

4、重启SSH服务

使配置生效:

sudo systemctl restart ssh

检查服务状态:

sudo systemctl status ssh

应该看到类似以下输出:

 ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running)

image.png

5、防火墙配置

如果系统启用了UFW防火墙,需要允许SSH连接:

# 检查防火墙状态
sudo ufw status

# 如果防火墙已启用,允许SSH连接
sudo ufw allow ssh
# 或者指定端口
sudo ufw allow 22/tcp

# 查看防火墙规则
sudo ufw status numbered

6、测试密码登录

从另一台机器(或本机)测试root密码登录:

ssh root@服务器IP地址

例如:

ssh root@192.168.100.111

首次连接会提示确认主机指纹,输入yes并回车,然后输入root密码。


三、SSH密钥认证(推荐)

SSH密钥认证比密码认证更安全,因为:

  • 无法被暴力破解
  • 不需要在网络上传输密码
  • 可以设置无密码登录(私钥加密除外)
  • 更难被中间人攻击

1、客户端生成SSH密钥对

1.1 生成RSA密钥对(推荐)

Mac默认安装了OpenSSH,直接在终端运行:

ssh-keygen -t rsa -b 4096 -C "luoxiaodou@juejin.com"

Windows 10/11(推荐):  现代Windows系统已内置OpenSSH,在PowerShell或命令提示符中运行相同命令:

ssh-keygen -t rsa -b 4096 -C "luoxiaodou@juejin.com"

较老Windows系统:  如果没有内置OpenSSH,可以安装:

  • Git for Windows(包含SSH工具)
  • PuTTY套件(使用PuTTYgen生成密钥)

参数说明:

  • -t rsa:指定密钥类型为RSA
  • -b 4096:指定密钥长度为4096位(更安全,也可用2048
  • -C:添加注释,通常使用邮箱地址

1.2 生成ED25519密钥对(现代推荐)

ssh-keygen -t ed25519 -C "luoxiaodou@juejin.com"

ED25519算法更现代、更安全、密钥更短。

交互过程说明:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa): [直接回车使用默认路径]
Enter passphrase (empty for no passphrase): [输入私钥密码,可留空]
Enter same passphrase again: [再次输入私钥密码]

私钥密码选择建议:

  • 设置密码:更安全,但每次使用需要输入
  • 不设密码:方便自动化脚本,但私钥文件需要妥善保管

2、查看生成的密钥文件

运行命令后,会提示保存位置,默认为:

  • Mac/Linux: ~/.ssh/id_rsa

  • Windows: C:\Users\用户名.ssh\id_rsa

应该看到类似以下文件:

  • id_rsa:私钥文件(严格保密)
  • id_rsa.pub:公钥文件(可以公开,需要上传到服务器)

3、将公钥复制到服务器

3.1 方法一:使用ssh-copy-id命令(推荐)

ssh-copy-id root@服务器IP地址

例如:

ssh-copy-id root@192.168.1.100

这个命令会自动将公钥添加到服务器的~/.ssh/authorized_keys文件中。

3.2 方法二:手动复制

如果ssh-copy-id命令不可用,可以手动复制:

在客户端查看公钥内容:

cat ~/.ssh/id_rsa.pub

在服务器上创建.ssh目录并设置权限:

mkdir -p ~/.ssh
chmod 700 ~/.ssh

将公钥内容添加到authorized_keys文件:

echo "公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

3.3 方法三:使用scp命令

scp ~/.ssh/id_rsa.pub root@服务器IP:/tmp/
ssh root@服务器IP
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
rm /tmp/id_rsa.pub
chmod 600 ~/.ssh/authorized_keys

4、服务器端SSH配置

确保服务器SSH配置支持公钥认证:

sudo nano /etc/ssh/sshd_config

确认以下配置项:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

5、测试密钥认证

从客户端测试密钥登录:

ssh root@服务器IP地址

如果配置正确,应该直接登录成功(如果私钥设置了密码,会要求输入私钥密码)。

6、禁用密码认证(可选,推荐)

为了进一步提高安全性,可以禁用密码认证,仅使用密钥认证:

sudo nano /etc/ssh/sshd_config

修改以下配置:

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

重启SSH服务:

sudo systemctl restart ssh

注意:禁用密码认证前,请确保密钥认证工作正常,否则可能无法登录!


四、高级配置和安全加固

1、更改SSH默认端口

修改默认端口可以减少自动化扫描攻击:

sudo nano /etc/ssh/sshd_config

修改端口配置:

Port 2222  # 改为其他端口,避免使用22

更新防火墙规则:

sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp  # 删除旧规则

连接时需要指定端口:

ssh -p 2222 root@服务器IP

2、限制登录IP地址

仅允许特定IP地址登录:

sudo nano /etc/ssh/sshd_config

添加配置:

AllowUsers root@192.168.1.100  # 仅允许来自192.168.1.100的root登录
# 或者使用网段
AllowUsers root@192.168.1.0/24

3、安装fail2ban防暴力破解

sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

配置fail2ban:

sudo nano /etc/fail2ban/jail.local

添加配置:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600

4、配置SSH密钥管理

4.1 多密钥管理

如果需要管理多个SSH密钥,可以创建SSH配置文件:

nano ~/.ssh/config

配置示例:

Host server1
    HostName 192.168.1.100
    User root
    Port 22
    IdentityFile ~/.ssh/id_rsa_server1

Host server2
    HostName 192.168.1.101
    User root
    Port 2222
    IdentityFile ~/.ssh/id_rsa_server2

使用方法:

ssh server1  # 自动使用对应配置
ssh server2

4.2 SSH Agent管理

使用SSH Agent可以避免重复输入私钥密码:

# 启动SSH Agent
eval "$(ssh-agent -s)"

# 添加私钥到Agent
ssh-add ~/.ssh/id_rsa

# 查看已添加的密钥
ssh-add -l

五、障排查和常见问题

1、接被拒绝

问题现象:

ssh: connect to host 192.168.1.100 port 22: Connection refused

排查步骤:

# 检查SSH服务状态
sudo systemctl status ssh

# 检查SSH服务是否监听端口
sudo netstat -tlnp | grep :22

# 检查防火墙状态
sudo ufw status

# 检查系统日志
sudo journalctl -u ssh -f

2、权限被拒绝

问题现象:

Permission denied (publickey,password).

排查步骤:

# 检查SSH配置
sudo sshd -T | grep -i permit

# 查看SSH登录日志
sudo tail -f /var/log/auth.log

# 检查.ssh目录权限
ls -la ~/.ssh/

正确的权限设置:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

3、密钥认证失败

公钥格式错误

# 检查公钥格式
ssh-keygen -l -f ~/.ssh/id_rsa.pub

authorized_keys文件权限错误

chmod 600 ~/.ssh/authorized_keys
chown root:root ~/.ssh/authorized_keys

SELinux问题(如果启用)

sudo restorecon -R ~/.ssh

六、安全建议

开启root远程登录存在一定的安全风险,请根据实际环境谨慎选择:

适用场景: 开发测试环境、内网环境、个人学习环境、需要频繁系统管理的场景

不建议使用的场景: 生产环境服务器、面向公网的服务器、存储敏感数据的系统

风险说明: root用户拥有系统最高权限,容易成为恶意攻击的目标。误操作可能造成系统损坏,密码泄露风险较高

1. 安全配置检查清单

  • 使用强密码或密钥认证
  • 更改默认SSH端口
  • 限制登录IP地址
  • 安装fail2ban防护
  • 定期更新系统
  • 配置适当的防火墙规则
  • 定期检查SSH登录日志
  • 禁用不必要的SSH功能

2. 定期维护

# 定期查看登录日志
sudo grep "Accepted|Failed" /var/log/auth.log | tail -20

# 检查fail2ban状态
sudo fail2ban-client status sshd

# 更新系统
sudo apt update && sudo apt upgrade -y

3. 备份重要配置

# 创建配置备份脚本
cat > ~/backup_ssh_config.sh << 'EOF'
#!/bin/bash
BACKUP_DIR=~/ssh_config_backup_$(date +%Y%m%d)
mkdir -p $BACKUP_DIR
cp /etc/ssh/sshd_config $BACKUP_DIR/
cp -r ~/.ssh $BACKUP_DIR/
echo "SSH配置已备份到 $BACKUP_DIR"
EOF

chmod +x ~/backup_ssh_config.sh

无论选择哪种认证方式,都要根据实际环境评估安全风险,并采取适当的防护措施。安全性和便利性之间需要找到平衡点,确保系统既好用又安全。