Ubuntu 22.04 SSH服务完全配置指南:从基础到安全加固

引言

在服务器管理中,SSH(Secure Shell)是远程访问Linux系统的标准工具。Ubuntu 22.04 LTS作为长期支持版本,其SSH配置对于系统安全至关重要。本文将全面介绍如何配置和加固Ubuntu 22.04的SSH服务,特别深入解析PermitRootLogin prohibit-password等关键安全选项。

第一部分:SSH服务安装与基本配置

1.1 安装SSH服务

在全新安装的Ubuntu 22.04上,SSH服务可能未预装。安装步骤如下:

bash 复制代码
sudo apt update
sudo apt install openssh-server -y

安装完成后,服务会自动启动。通过以下命令验证安装状态:

bash 复制代码
sudo systemctl status ssh

1.2 基本配置文件结构

SSH服务的主配置文件位于/etc/ssh/sshd_config。在修改前,建议备份原文件:

bash 复制代码
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup

使用文本编辑器(如nano或vim)打开配置文件:

bash 复制代码
sudo nano /etc/ssh/sshd_config

1.3 常用配置参数

以下是推荐的基本配置选项:

bash 复制代码
# 修改默认端口(降低自动化攻击风险)
Port 2222  # 建议使用1024-65535之间的端口

# 限制监听地址(如果有多网卡)
# ListenAddress 192.168.1.100

# 协议版本(禁用已不安全的SSHv1)
Protocol 2

# 登录超时设置
LoginGraceTime 60
MaxAuthTries 3

# 连接保持选项
ClientAliveInterval 300
ClientAliveCountMax 2

# 禁用不安全的认证方式
ChallengeResponseAuthentication no
UsePAM yes

# 日志级别
LogLevel VERBOSE

1.4 应用配置变更

修改配置后,必须重启服务才能使更改生效:

bash 复制代码
# 测试配置文件语法
sudo sshd -t

# 重启SSH服务
sudo systemctl restart ssh

# 设置开机自启
sudo systemctl enable ssh

第二部分:深入理解PermitRootLogin选项

2.1 PermitRootLogin详解

PermitRootLogin是SSH安全配置中最关键的选项之一。它控制root用户的登录方式,有以下几种可能值:

  • yes:允许root用户使用密码或密钥登录
  • no:完全禁止root用户登录
  • prohibit-password /without-password:允许root使用密钥登录,禁止密码登录
  • forced-commands-only:仅允许执行预定义的命令

2.2 prohibit-password的安全优势

PermitRootLogin prohibit-password提供了最佳的安全性与可用性平衡:

  1. 防御暴力破解:禁用密码登录完全消除了针对root的密码猜测攻击
  2. 保留管理访问:通过密钥认证仍可获取root权限进行必要维护
  3. 增强可追溯性:密钥登录提供更好的审计追踪能力
  4. 支持自动化:允许脚本和自动化工具以root权限运行

2.3 配置示例

bash 复制代码
# 启用密钥认证,禁用密码登录
PermitRootLogin prohibit-password
PubkeyAuthentication yes
PasswordAuthentication no

# 确保root用户的.ssh目录权限正确
sudo chmod 700 /root/.ssh
sudo chmod 600 /root/.ssh/authorized_keys

2.4 密钥管理最佳实践

  1. 生成强密钥

    bash 复制代码
    ssh-keygen -t ed25519 -a 100  # 最推荐的算法
    # 或使用RSA
    ssh-keygen -t rsa -b 4096 -o -a 100
  2. 安全传输公钥

    bash 复制代码
    # 方法1:使用ssh-copy-id
    ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server -p 2222
    
    # 方法2:手动复制(当ssh-copy-id不可用时)
    cat ~/.ssh/id_ed25519.pub | \
      ssh -p 2222 user@server "mkdir -p ~/.ssh && \
      cat >> ~/.ssh/authorized_keys && \
      chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
  3. 多密钥管理:为不同用途(开发、运维、自动化)使用不同的密钥对

第三部分:高级安全配置

3.1 用户访问控制

bash 复制代码
# 允许特定用户登录(白名单)
AllowUsers alice bob charlie

# 允许特定用户组登录
AllowGroups ssh-users admin

# 拒绝特定用户(黑名单)
DenyUsers mallory eve

# 允许来自特定主机的用户
Match Address 192.168.1.0/24
    AllowUsers alice bob

3.2 加密算法加固

禁用弱加密算法和协议:

bash 复制代码
# 禁用不安全的MAC算法
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com

# 禁用不安全的加密算法
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com

# 禁用不安全的密钥交换算法
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org

3.3 会话限制

bash 复制代码
# 限制并发会话数
MaxSessions 10

# 限制每个IP的连接数
MaxStartups 10:30:100

# 禁用端口转发(根据需求)
AllowTcpForwarding no
AllowStreamLocalForwarding no

第四部分:完整安全配置示例

以下是一个生产环境级别的SSH配置示例:

bash 复制代码
# /etc/ssh/sshd_config
# 基本设置
Port 2222
ListenAddress 0.0.0.0
Protocol 2

# 用户认证
PermitRootLogin prohibit-password
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes

# 密钥算法
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key

# 加密配置
KexAlgorithms curve25519-sha256@libssh.org
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com

# 会话管理
ClientAliveInterval 300
ClientAliveCountMax 2
MaxAuthTries 3
MaxSessions 10
LoginGraceTime 60

# 访问控制
AllowUsers alice bob charlie
AllowGroups ssh-users

# 功能限制
X11Forwarding no
AllowTcpForwarding no
PermitTunnel no
AllowAgentForwarding no
PrintMotd no
PrintLastLog yes

# 日志配置
LogLevel VERBOSE
SyslogFacility AUTH

第五部分:防火墙与额外安全措施

5.1 UFW防火墙配置

bash 复制代码
# 安装UFW(如果未安装)
sudo apt install ufw -y

# 允许SSH端口
sudo ufw allow 2222/tcp

# 限制特定IP访问(可选)
sudo ufw allow from 192.168.1.0/24 to any port 2222

# 启用防火墙
sudo ufw enable

# 查看状态
sudo ufw status verbose

5.2 Fail2Ban防暴力破解

bash 复制代码
# 安装Fail2Ban
sudo apt install fail2ban -y

# 创建自定义SSH配置
sudo nano /etc/fail2ban/jail.local

添加以下内容:

ini 复制代码
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600

重启Fail2Ban:

bash 复制代码
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

5.3 定期更新与监控

bash 复制代码
# 设置自动安全更新
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades

# 监控SSH登录尝试
sudo apt install acct -y  # 安装账户监控工具
last  # 查看登录历史
sudo lastb  # 查看失败登录尝试

# 设置日志轮转
sudo nano /etc/logrotate.d/ssh

第六部分:故障排除与维护

6.1 常见问题解决

问题1:配置错误导致无法连接

bash 复制代码
# 检查配置语法
sudo sshd -t

# 查看详细错误信息
sudo journalctl -u ssh -f --no-pager

问题2:密钥认证失败

bash 复制代码
# 检查权限
ls -la ~/.ssh/
# 正确权限应为:
# drwx------   .ssh
# -rw-------   authorized_keys

# 检查SELinux/AppArmor
sudo aa-status  # Ubuntu使用AppArmor

问题3:端口被占用

bash 复制代码
# 查看端口占用情况
sudo ss -tlnp | grep :2222
sudo netstat -tlnp | grep :2222

6.2 连接测试命令

bash 复制代码
# 测试连接(详细模式)
ssh -vvv -p 2222 user@server_ip

# 测试特定密钥
ssh -i ~/.ssh/id_ed25519 -p 2222 user@server_ip

# 测试端口转发
ssh -L 8080:localhost:80 -p 2222 user@server_ip

6.3 定期维护任务

bash 复制代码
# 每月检查一次
# 1. 审查授权密钥
sudo nano /root/.ssh/authorized_keys
# 2. 检查登录日志
sudo grep "Accepted" /var/log/auth.log
# 3. 更新SSH软件包
sudo apt update && sudo apt upgrade openssh-server
# 4. 轮换主机密钥(每年一次)
sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
sudo ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N ""

第七部分:备份与灾难恢复

7.1 配置文件备份策略

bash 复制代码
# 创建备份目录
sudo mkdir -p /backup/ssh

# 完整备份SSH配置
sudo tar -czf /backup/ssh/sshd_config_backup_$(date +%Y%m%d).tar.gz \
    /etc/ssh/ \
    /root/.ssh/ \
    /home/*/.ssh/ 2>/dev/null

# 创建恢复脚本
cat > /backup/ssh/restore_ssh.sh << 'EOF'
#!/bin/bash
# 恢复SSH配置
tar -xzf sshd_config_backup.tar.gz -C /
systemctl restart ssh
echo "SSH配置已恢复"
EOF
chmod +x /backup/ssh/restore_ssh.sh

7.2 紧急访问预案

即使配置了严格的安全策略,也应保留紧急访问通道:

  1. 控制台访问:确保物理或IPMI/KVM访问可用
  2. 备用端口:在防火墙中保留一个备用端口
  3. 管理网络:通过专用管理网络接口访问
  4. 跳板机:设置专用的跳板服务器

结论

在Ubuntu 22.04上正确配置SSH服务是服务器安全的基础。通过合理设置PermitRootLogin prohibit-password等选项,结合防火墙、Fail2Ban等工具,可以构建坚固的远程访问安全体系。关键点总结:

  1. 禁用密码认证,强制使用密钥登录
  2. 限制root直接登录 ,通过prohibit-password平衡安全与便利
  3. 更改默认端口,减少自动化攻击
  4. 实施最小权限原则,严格限制用户访问
  5. 建立监控和审计,及时发现异常行为

安全配置不是一次性的任务,而是一个持续的过程。定期审查和更新安全策略,保持系统和软件的更新,才能真正保护服务器免受威胁。


附录:快速检查清单

  • SSH端口已从22更改为其他端口
  • PermitRootLogin设置为prohibit-password
  • 密码认证已禁用
  • 防火墙已配置并启用
  • Fail2Ban已安装并配置
  • 使用Ed25519或RSA 4096位密钥
  • 定期备份SSH配置和密钥
  • 建立紧急访问预案
  • 设置日志监控和告警

通过遵循本指南,您将在Ubuntu 22.04上建立一个既安全又实用的SSH访问环境,为服务器管理打下坚实的基础。

相关推荐
老兵发新帖9 小时前
ubuntu服务器配置私钥登录
linux·服务器·ubuntu
知识分享小能手9 小时前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04 中的大数据 —— 知识点详解 (24)
大数据·学习·ubuntu
oMcLin9 小时前
如何在Ubuntu 22.04 LTS上通过配置ZFS存储池,提升高吞吐量数据库的读写性能与可靠性?
linux·数据库·ubuntu
散峰而望21 小时前
【Coze - AI Agent 开发平台】-- 你真的了解 Coze 吗
开发语言·人工智能·python·aigc·ai编程·ai写作
阿部多瑞 ABU1 天前
肤契:内衬协议版
ai写作
warton881 天前
ubuntu24 安装 proxsql 实现数据库代理
linux·运维·mysql·ubuntu
会跑的葫芦怪1 天前
cursor 打开wsl Ubuntu项目
linux·运维·ubuntu
ChenYY~1 天前
双系统显卡冲突修复记录
ubuntu·显卡·黑屏·双系统·nvidia驱动
oMcLin1 天前
如何在 Ubuntu 22.04 LTS 上部署并优化 OpenStack 云计算平台,实现多租户虚拟化与弹性伸缩?
ubuntu·云计算·openstack