更改 SSH 默认的 22 端口是防范自动化暴力破解的有效基础手段。以下是更改 SSH 端口的完整、安全的操作流程:

⚠️ 极度重要提示:
在进行以下操作时,绝对不要关闭当前的 SSH 连接窗口! 保持当前窗口开启,直到你用新窗口、新端口成功连接上服务器为止。这样如果配置出错,你还能在当前窗口改回来。

# 1. 备份 SSH 配置文件(防患于未然)

在修改任何核心配置文件之前,先做一个备份:

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

# 2. 编辑 SSH 配置文件

使用你习惯的文本编辑器(如 nanovim )打开 SSH 配置文件:

sudo nano /etc/ssh/sshd_config

在文件中找到写着 Port 22 的那一行。

  • 如果前面有 # 号(如 #Port 22 ),请删掉 # 号取消注释。
  • 22 修改为你想要的端口号。建议选择 1024 到 65535 之间的高位端口,以避免和系统保留端口冲突。例如,我们将其改为 2222
Port 2222

修改完成后,保存并退出编辑器(在 nano 中按 Ctrl+O 保存,回车确认,然后按 Ctrl+X 退出)。

# 检查配置文件是否有语法错误
sudo sshd -t

# 3. 在防火墙中放行新端口(核心步骤)

由于你在上一步配置了 UFW,现在服务器默认拒绝所有未放行的连接。你必须立刻将新端口加入白名单:

# 放行新的 SSH 端口(以 2222 为例)
sudo ufw allow 2222/tcp
# 重新加载防火墙规则
sudo ufw reload

注:如果你使用的是云服务器(如 AWS、阿里云、腾讯云等),你还必须去云服务商的网页控制台 -> 安全组(Security Groups)或防火墙设置中,添加入站规则,放行 TCP 2222 端口。

# 4. 重启 SSH 服务

使刚才修改的配置生效:

# Ubuntu / Debian 系统:
sudo systemctl restart ssh
# CentOS / RHEL / Fedora 系统:
sudo systemctl restart sshd

# 5. 测试新端口连接

不要关闭刚才修改配置的终端窗口! 打开一个全新的终端窗口,尝试使用新端口连接你的服务器:

ssh -p 2222 username@your_server_ip

(将 2222usernameyour_server_ip 替换为你实际的配置)

# 6. 收尾工作(确认连接成功后执行)

如果第 5 步连接成功,说明新端口配置完美运行。此时,你可以回到原来的终端,为了安全起见,在 UFW 中关闭旧的 22 端口:

sudo ufw delete allow 22/tcp
sudo ufw reload

在较新的 Ubuntu/Debian 系统中,SSH 的启动方式被改为了 systemd socket 激活模式。这意味着系统不再让 SSH 服务自己去读取 /etc/ssh/sshd_config 里的端口设置来监听,而是由 ssh.socket 这个组件强行在前端监听 22 端口,有连接进来时再把流量转交给后台的 ssh.service

因此,无论你怎么修改 sshd_config 里的端口,只要 ssh.socket 还在运行,它都会固执地监听 22 端口。

# 解决方法:关闭 Socket 模式,恢复传统模式

最简单也最符合大部分人使用习惯的办法,就是直接禁用 ssh.socket ,让 SSH 重新通过你修改的 sshd_config 配置文件来接管端口。

请按顺序执行以下命令:

1. 停止并禁用 ssh.socket

sudo systemctl disable --now ssh.socket

2. 重新加载系统服务配置(刷新状态)

sudo systemctl daemon-reload

3. 重启 SSH 服务

sudo systemctl restart ssh.service

4. 再次检查状态

sudo systemctl status ssh

这次如果你再看日志, TriggeredBy: ● ssh.socket 应该消失了,而且下方的 Server listening on... 应该会显示你修改后的新端口(比如 2222)。

# 下一步建议(关于防火墙)

如果还没有配置 UFW,并且现在端口应该已经修改成功了。那么你现在可以安全地开启防火墙了。请按照以下步骤直接操作:

# 1. 允许你的新 SSH 端口(把 2222 替换成你实际改的端口)
sudo ufw allow 2222/tcp
# 2. 设置默认规则(拒绝入站,允许出站)
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 3. 启用防火墙
sudo ufw enable

最后提醒: 保持当前终端窗口不关,开一个新窗口,用 ssh -p 新端口 root@你的IP 测试一下能否连上。能连上,就大功告成了。

阅读次数

请我喝[茶]~( ̄▽ ̄)~*

藏雪 微信支付

微信支付

藏雪 支付宝

支付宝

藏雪 贝宝

贝宝