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
如上所示就是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)
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
无论选择哪种认证方式,都要根据实际环境评估安全风险,并采取适当的防护措施。安全性和便利性之间需要找到平衡点,确保系统既好用又安全。