更改 SSH 默认的 22 端口是防范自动化暴力破解的有效基础手段。以下是更改 SSH 端口的完整、安全的操作流程:
⚠️ 极度重要提示:
在进行以下操作时,绝对不要关闭当前的 SSH 连接窗口! 保持当前窗口开启,直到你用新窗口、新端口成功连接上服务器为止。这样如果配置出错,你还能在当前窗口改回来。
# 1. 备份 SSH 配置文件(防患于未然)
在修改任何核心配置文件之前,先做一个备份:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak |
# 2. 编辑 SSH 配置文件
使用你习惯的文本编辑器(如 nano 或 vim )打开 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 |
(将 2222 、 username 和 your_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 测试一下能否连上。能连上,就大功告成了。