新Ubuntu系统恢复到传统SSH方式的安全设置

背景

上篇文章站长说到了在较新的ubuntu系统中,我们从原来的方式修改默认22端口是不起作用的。我查看了官方的说明,说是为了减少占用的内存,优化内存使用,提高系统效率。


一.新的SSH管理方式

他们已经在较新的 Ubuntu 系统(从 22.10以后的版本,像现在的 Ubuntu 24.04 LTS,ubuntu26.04等中,Canonical 默认引入了 systemd socket activation(套接字激活) 来管理 SSH 服务。

这意味着:SSH 端口不再由 sshd 守护进程直接监听,而是交由 systemd 统一接管监听。所以我们正常的在 /etc/ssh/sshd_config 中修改 Port 端口一点用也没有,还可能会导致配置混乱。官方说明如下,感兴趣的可以看下。

SSHd now uses socket-based activation (Ubuntu 22.10 and later)

二.新方式的优点和缺点

站长之前操作了很多次都被锁在外面了,本来以为是操作不当或者是操作顺序不对。看来现在不仅仅是我自己个人操作的问题了,相信有很多人也踩坑了。虽然新的方式对系统优化更好,官方也推荐使用新的SSH管理方式,但是我看了国外的一些论坛后发现:有的人觉得新的SSH管理方式更好,有的则是吐槽不好用,容易混乱,还是习惯用传统的管理方式。所以官方也给出了修改到传统SSH管理方式的办法

三.改回到传统模式

在SSH工具中通过以下命令恢复到传统SSH管理方式

systemctl disable --now ssh.socket
rm -f /etc/systemd/system/ssh.service.d/00-socket.conf
rm -f /etc/systemd/system/ssh.socket.d/addresses.conf
systemctl daemon-reload
systemctl enable --now ssh.service

你也可以通过一键脚本来设置

四.继续进行安全设置

然后我们就可以正常在SSH工具中输入

sudo nano /etc/ssh/sshd_config 

来进行设置了:红色是我之前测试的2222端口,不用管,默认的是#Port 22,

用鼠标滚轮直接把光标拖到最下面的空白处粘贴如下命令:

Port 6666
PermitRootLogin no
PasswordAuthentication no

我这里把端口修改成6666,你可以改成你自己想要的端口就可以了(1–65535之间)

然后Ctrl+O,再按回车键,再Ctrl+X退出设置界面

sudo systemctl restart ssh

再检查一下

sudo systemctl status ssh

如果显示 绿色的:active (running) 那就代表成功了

这时候我们看下监听端口是不是我们刚才设置好的

sudo ss -tlnp | grep ssh

这样咱们就设置好了!

注意:我们设置的时候如果服务器有云安全组和防火墙的需要同步放开你刚才设置端口!

五.一键设置脚本

如果你觉得麻烦,那么在设置恢复到传统模式后,执行以下脚本:

执行前要注意切换到root权限下,如果是普通用户就在SSH工具中输入 sudo -i 切换到 root

#!/bin/bash

# 确保以 root 权限运行
if [ "$EUID" -ne 0 ]; then
  echo "错误:请使用 root 权限运行此脚本 (可以先执行 sudo -i)"
  exit 1
fi

NEW_PORT=6666
SSHD_CONFIG="/etc/ssh/sshd_config"
CUSTOM_CONF="/etc/ssh/sshd_config.d/99-custom-security.conf"

echo "========================================="
echo "1. 正在配置传统 SSH 服务安全策略..."
echo "========================================="

# 防御性操作:确保系统不会再次被 systemd socket 劫持
systemctl stop ssh.socket 2>/dev/null
systemctl disable ssh.socket 2>/dev/null
systemctl mask ssh.socket 2>/dev/null
systemctl enable ssh 2>/dev/null

# 现代 Ubuntu 版本推荐使用 .d 目录配置,优先级高于主配置文件
# 写入自定义端口与安全策略,确保绝对生效
mkdir -p /etc/ssh/sshd_config.d
cat > "$CUSTOM_CONF" <<EOF
Port ${NEW_PORT}
PermitRootLogin no
PasswordAuthentication no
EOF

# 为了兼容你的习惯,同时清理主配置文件中可能存在的硬编码冲突
sed -i 's/^Port/#Port/' $SSHD_CONFIG
sed -i 's/^PermitRootLogin/#PermitRootLogin/' $SSHD_CONFIG
sed -i 's/^PasswordAuthentication/#PasswordAuthentication/' $SSHD_CONFIG

echo "========================================="
echo "2. 正在检查并配置 UFW 防火墙..."
echo "========================================="
if ! command -v ufw >/dev/null 2>&1; then
    echo "系统未安装 UFW,正在自动安装..."
    apt-get update
    apt-get install -y ufw
else
    echo "系统已安装 UFW,准备配置规则..."
fi

# 放行新端口
ufw allow ${NEW_PORT}/tcp
echo "已放行 ${NEW_PORT}/tcp 端口。"

# 检查防火墙是否处于激活状态,若激活则重载规则
if ufw status | grep -qw "active"; then
    ufw reload
else
    echo "注意:UFW 防火墙当前未激活。如有需要,请稍后手动执行 'ufw enable' 激活它(请提前确保所有业务端口已放行)。"
fi


echo "========================================="
echo "3. 正在安装并配置 Fail2ban..."
echo "========================================="
if ! command -v fail2ban-client >/dev/null 2>&1; then
    apt-get update
    apt-get install -y fail2ban
fi

# 配置 Fail2ban
cat > /etc/fail2ban/jail.d/sshd-custom.local <<EOF
[sshd]
enabled = true
port = ${NEW_PORT}
backend = systemd
maxretry = 5
bantime = 36000
findtime = 600
banaction = ufw
EOF

# 启动并重启服务
systemctl enable fail2ban
systemctl restart fail2ban

echo "========================================="
echo "4. 重启 SSH 服务应用更改..."
echo "========================================="
systemctl restart ssh


echo "================================================================="
echo "✅ 所有安全配置已执行完毕!"
echo ""
echo "🚨 【极其重要的安全提醒】 🚨"
echo "1. 云厂商安全组同步:如果你的服务器部署在阿里云、腾讯云、AWS 等云厂商,"
echo "   请务必立刻前往云服务商控制台,在【安全组/防火墙】策略中放行 TCP $NEW_PORT 端口!"
echo "   否则你将无法连接服务器!"
echo ""
echo "2. ⚠️ 绝不可关闭当前窗口 ⚠️"
echo "   请保持当前终端的 SSH 连接开启,千万不要断开!"
echo ""
echo "3. 新窗口验证:请打开一个新的 SSH 终端(例如 Tabby),使用配置好公钥的【普通用户】"
echo "   通过新端口进行连接测试:"
echo "   ssh -p $NEW_PORT 普通用户名@你的服务器IP"
echo ""
echo "确认新窗口可以丝滑免密登录后,当前窗口方可关闭。"
echo "================================================================="

VPS服务器的SSH安全你现在已经搞定了,接下来就可以自由的玩耍了!安装操作面板还有各种各样的软件了!比如你想建站,那就来看看VPS怎么安装Wordpress建站

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注