Debian/PVE/Ubuntu/FnOS 配置 SSH 服务🔐

Debian SSH 配置

SSH(Secure Shell)是一种加密的网络传输协议,用于在不安全的网络中提供安全的远程登录和其他安全网络服务。本指南将详细介绍在 Debian 12 上配置和优化 SSH 服务的完整流程。


📋 目录导航


📖 简介

SSH(Secure Shell)是一种加密的网络传输协议,用于在不安全的网络中提供安全的远程登录和其他安全网络服务。本指南将详细介绍在 Debian 12 上配置和优化 SSH 服务的完整流程。


🛠️ 一、SSH 服务安装与基本配置

1. 📦 安装 SSH 服务器并启用服务

1
2
3
4
5
6
7
8
9
10
11
# 更新软件包列表并安装 SSH 服务器
sudo apt-get update && sudo apt-get install openssh-server -y

# 启动 SSH 服务
sudo systemctl start ssh

# 设置 SSH 服务开机自启
sudo systemctl enable ssh

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

2. 📝 查看 SSH 配置文件

1
2
3
4
5
# 查看 SSH 配置文件内容
cat /etc/ssh/sshd_config

# 或者使用分页查看
less /etc/ssh/sshd_config

3. 💾 备份原始配置文件

1
2
# 备份 SSH 配置文件
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup.$(date +%Y%m%d)

⚙️ 二、SSH 服务优化配置

1. ⚡ 使用 sed 命令修改 SSH 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 使用 sed 命令修改 SSH 配置并创建备份
sudo sed -i.bak \
-e 's/^#Port 22/Port 22/' \
-e 's/^#PermitRootLogin.*/PermitRootLogin yes/' \
-e 's/^#GSSAPIAuthentication.*/GSSAPIAuthentication no/' \
-e 's/^#UseDNS.*/UseDNS no/' \
-e 's/^#Compression.*/Compression yes/' \
-e 's/^#TCPKeepAlive.*/TCPKeepAlive yes/' \
-e 's/^#ClientAliveInterval.*/ClientAliveInterval 10/' \
-e 's/^#ClientAliveCountMax.*/ClientAliveCountMax 999/' \
/etc/ssh/sshd_config

# 重启 SSH 服务使配置生效
sudo systemctl restart ssh

2. 📋 配置说明

配置项 原值 修改后值 说明
Port #Port 22 Port 22 SSH 服务端口
PermitRootLogin #PermitRootLogin prohibit-password PermitRootLogin yes 允许 root 用户登录
GSSAPIAuthentication #GSSAPIAuthentication no GSSAPIAuthentication no 禁用 GSSAPI 认证
UseDNS #UseDNS no UseDNS no 禁用 DNS 反向解析
ClientAliveInterval #ClientAliveInterval 0 ClientAliveInterval 10 客户端活跃检查间隔(秒)
ClientAliveCountMax #ClientAliveCountMax 3 ClientAliveCountMax 999 客户端活跃检查最大次数
TCPKeepAlive #TCPKeepAlive yes TCPKeepAlive yes 启用 TCP 保活机制,检测连接状态
Compression #Compression delayed Compression yes 启用数据压缩,节省带宽但增加 CPU 开销

3. 查看 SSH 修改

1
grep -E 'Port 22|PermitRootLogin|GSSAPIAuthentication|UseDNS|Compression|TCPKeepAlive|ClientAliveInterval|ClientAliveCountMax|PubkeyAuthentication|AuthorizedKeysFile' /etc/ssh/sshd_config

三 、客户端连接 SSH

1. 查看服务器 IP 地址

1
hostname -I | awk '{print $1}'

输出示例:
root@debian13 ~ # hostname -I | awk ‘{print $1}’
10.10.10.246

2. 客户端连接

1
ssh -p 22 root@10.10.10.246

🔒 四、高级安全配置

1. 🛡️ 增强 SSH 安全性

1
2
# 手动编辑 SSH 配置文件添加更多安全选项
sudo nano /etc/ssh/sshd_config

在配置文件中添加或修改以下选项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 更改默认 SSH 端口(可选)
Port 2222

# 限制最大认证尝试次数
MaxAuthTries 3

# 设置登录宽限时间
LoginGraceTime 60

# 限制同时连接的会话数
MaxSessions 10

# 禁用密码认证,只允许密钥认证(更安全)
PasswordAuthentication no
PubkeyAuthentication yes

# 限制可登录的用户
AllowUsers admin root

# 限制可登录的用户组
AllowGroups ssh-users

# 设置空闲会话超时时间
ClientAliveInterval 300
ClientAliveCountMax 2

2. 🔑 创建 SSH 密钥对

1
2
3
4
5
6
7
# 生成 SSH 密钥对(在客户端执行)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

# 将公钥复制到服务器
ssh-copy-id -p 22 user@your_server_ip

# 或者手动添加公钥到服务器的 ~/.ssh/authorized_keys 文件

🔥 五、防火墙配置

1. 🛡️ 配置 UFW 防火墙

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装 UFW 防火墙
sudo apt install ufw -y

# 允许 SSH 连接
sudo ufw allow ssh

# 或者允许特定端口
sudo ufw allow 2222/tcp

# 启用防火墙
sudo ufw enable

# 查看防火墙状态
sudo ufw status verbose

2. 🔧 使用 iptables 配置防火墙

1
2
3
4
5
6
7
8
9
# 允许 SSH 连接
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 或者允许特定端口
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

# 保存 iptables 规则
sudo apt install iptables-persistent -y
sudo netfilter-persistent save

🔍 六、故障排除与监控

1. 📊 检查 SSH 服务状态

1
2
3
4
5
6
7
8
9
10
11
# 查看 SSH 服务状态
sudo systemctl status ssh

# 查看 SSH 服务日志
sudo journalctl -u ssh -f

# 查看最近登录记录
last

# 查看失败的登录尝试
sudo grep "Failed password" /var/log/auth.log

2. 🧪 测试 SSH 连接

1
2
3
4
5
6
7
8
# 测试 SSH 连接
ssh -v user@your_server_ip

# 测试特定端口
ssh -p 2222 user@your_server_ip

# 测试密钥认证
ssh -i ~/.ssh/your_private_key user@your_server_ip

🚀 七、性能优化

1. ⚡ 优化 SSH 连接速度

1
2
3
4
5
6
7
8
# 编辑 SSH 配置文件
sudo nano /etc/ssh/sshd_config

# 添加以下性能优化选项
UseDNS no
GSSAPIAuthentication no
Compression yes
TCPKeepAlive yes

2. 🔄 启用 SSH 连接复用

1
2
3
4
5
# 在客户端 SSH 配置中启用连接复用
echo -e "Host *\n ControlMaster auto\n ControlPath ~/.ssh/sockets/%r@%h-%p\n ControlPersist 600" >> ~/.ssh/config

# 创建 sockets 目录
mkdir -p ~/.ssh/sockets

💾 八、备份与恢复

1. 📦 备份 SSH 配置

1
2
3
4
5
6
7
8
# 创建备份目录
sudo mkdir -p /backup/ssh

# 备份 SSH 配置文件
sudo tar -czf /backup/ssh/ssh_backup_$(date +%Y%m%d).tar.gz /etc/ssh

# 备份授权密钥
sudo tar -czf /backup/ssh/authorized_keys_backup_$(date +%Y%m%d).tar.gz /home/*/.ssh/authorized_keys /root/.ssh/authorized_keys 2>/dev/null || true

2. 🔄 恢复 SSH 配置

1
2
3
4
5
6
7
8
9
10
11
# 停止 SSH 服务
sudo systemctl stop ssh

# 恢复配置文件
sudo tar -xzf /backup/ssh/ssh_backup_$(date +%Y%m%d).tar.gz -C /

# 恢复授权密钥
sudo tar -xzf /backup/ssh/authorized_keys_backup_$(date +%Y%m%d).tar.gz -C /

# 重启 SSH 服务
sudo systemctl start ssh

🔎 九、安全审计脚本

1. 📜 创建 SSH 安全审计脚本

1
2
# 创建审计脚本
sudo nano /usr/local/bin/ssh_audit.sh

添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash

echo "=== SSH 安全审计 ==="
echo "审计时间: $(date)"
echo "=========================="

# 检查 SSH 服务状态
echo "SSH 服务状态:"
systemctl status ssh | grep "Active:"

# 检查开放端口
echo -e "\n开放端口:"
netstat -tulnp | grep ssh

# 检查最近登录
echo -e "\n最近登录记录:"
last | head -10

# 检查失败登录尝试
echo -e "\n失败登录尝试:"
grep "Failed password" /var/log/auth.log | tail -5

# 检查配置文件权限
echo -e "\n配置文件权限:"
ls -la /etc/ssh/sshd_config

# 检查 root 登录设置
echo -e "\nRoot 登录设置:"
grep "PermitRootLogin" /etc/ssh/sshd_config

echo -e "\n审计完成!"

2. ⚡ 设置脚本权限并执行

1
2
3
4
5
6
7
8
# 设置执行权限
sudo chmod +x /usr/local/bin/ssh_audit.sh

# 执行审计脚本
sudo /usr/local/bin/ssh_audit.sh

# 设置定期审计(每周一次)
echo "0 0 * * 0 root /usr/local/bin/ssh_audit.sh >> /var/log/ssh_audit.log" | sudo tee -a /etc/crontab

🐛 十、常见问题解决

1. 🔍 SSH 连接问题排查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 检查 SSH 服务是否运行
sudo systemctl status ssh

# 检查防火墙设置
sudo ufw status

# 检查端口是否开放
sudo netstat -tulnp | grep :22

# 检查 SSH 配置语法
sudo sshd -t

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

2. ⏰ 连接超时问题

1
2
# 增加客户端超时设置
echo -e "Host *\n ServerAliveInterval 60\n ServerAliveCountMax 5" >> ~/.ssh/config

📋 十一、最佳实践总结

  1. 🔄 更改默认端口:将 SSH 端口从 22 改为其他端口,减少自动化攻击
  2. 🚫 禁用 root 登录:使用普通用户登录后再切换至 root
  3. 🔑 使用密钥认证:禁用密码认证,只允许密钥认证
  4. 🌐 限制访问 IP:使用防火墙限制可访问 SSH 的 IP 范围
  5. 🔄 定期更新:保持系统和 SSH 软件包更新到最新版本
  6. 📊 监控日志:定期检查 SSH 日志,监控异常登录尝试
  7. 🛡️ 使用 Fail2Ban:安装 Fail2Ban 防止暴力破解攻击
  8. 💾 定期备份:定期备份 SSH 配置和授权密钥

通过以上配置,您可以在 Debian 12 上搭建一个安全、高效的 SSH 服务,实现安全的远程访问!🔐 记得定期审计和维护您的 SSH 配置哦!😊