Ubuntu 修改 SSH 默认 22 端口为自定义端口(完整教程)
一、前言
SSH(Secure Shell)是一种加密的远程登录协议,Linux 服务器通常使用 SSH 进行远程管理。
SSH 默认监听 22 端口,由于该端口广为人知,公网服务器经常会遭遇针对 22 端口的自动化扫描和暴力破解尝试。
为了减少针对默认端口的自动化扫描,可以将 SSH 登录端口修改为其他端口,例如 2222、22222 等。
需要注意的是,修改 SSH 端口并不能从根本上防止服务器被攻击,仍然建议配合 SSH 密钥认证、禁用密码登录和防火墙访问控制等安全措施。
本文以 Ubuntu 服务器(AWS EC2) 为例,介绍如何将 SSH 默认的 22 端口修改为 2222。
二、环境说明
| 项目 | 说明 |
|---|---|
| 操作系统 | Ubuntu |
| 云服务器 | AWS EC2(其他云服务器同样适用) |
| SSH 服务 | OpenSSH Server |
| 默认 SSH 端口 | 22 |
| 修改后的 SSH 端口 | 2222 |
| 登录用户 | ubuntu |
重要提示:在新端口确认可以正常登录之前,务必保持当前 SSH 连接,不要提前关闭原有终端。
三、修改 SSH 配置文件
1. 登录 Ubuntu 服务器
通过 SSH 连接服务器:
ssh -i "vps1.pem" ubuntu@服务器公网IP
其中:
-
-i:指定 SSH 私钥文件。 -
ubuntu:Ubuntu 系统默认登录用户名。 -
服务器公网IP:云服务器的公网 IP 地址。
2. 编辑 SSH 配置
执行以下命令:
sudo nano /etc/ssh/sshd_config
找到以下配置:
#Port 22
修改为:
Port 2222
说明:
-
Port:指定 SSH 服务监听的端口。 -
2222:新的 SSH 登录端口。 -
#:表示注释,需要删除才能使配置生效。
如果没有找到 #Port 22,可以在配置文件中添加:
Port 2222
注意:Ubuntu 可能通过 /etc/ssh/sshd_config.d/ 目录中的配置文件覆盖或优先处理部分设置。如果配置文件中存在 Include 指令,需要一并检查相关配置,避免多个文件中的 Port 设置产生冲突。
3. 保存配置文件
使用 nano 编辑器时:
-
按
Ctrl + O保存文件。 -
按
Enter确认文件名。 -
按
Ctrl + X退出编辑器。
四、检查 SSH 配置是否正确
修改完成后,先检查 SSH 配置文件语法:
sudo sshd -t
如果没有任何输出,通常表示配置语法检查通过。
还可以查看 SSH 最终生效的配置:
sudo sshd -T | grep '^port '
预期结果:
port 2222
如果输出的端口不是 2222,需要检查其他 SSH 配置文件是否存在端口设置。
五、开放 Ubuntu 防火墙端口
如果服务器使用 UFW 防火墙,需要放行新的 SSH 端口。
1. 查看防火墙状态
sudo ufw status
如果输出:
Status: inactive
说明 UFW 当前未启用。
如果输出:
Status: active
说明 UFW 已启用,需要确保新端口已放行。
2. 放行 2222 端口
执行:
sudo ufw allow 2222/tcp
命令说明:
| 参数 | 说明 |
|---|---|
| sudo | 使用管理员权限 |
| ufw | Ubuntu 防火墙管理工具 |
| allow | 允许访问 |
| 2222 | 开放的端口 |
| tcp | TCP 网络协议 |
查看防火墙规则:
sudo ufw status numbered
如果 UFW 已启用,正常情况下会看到类似:
2222/tcp ALLOW IN Anywhere
注意:如果 UFW 尚未启用,不需要为了修改 SSH 端口而强制启用。若准备启用 UFW,必须事先确保 SSH 登录端口已经放行。
六、配置 AWS EC2 安全组
如果使用 AWS EC2,除了 Ubuntu 系统防火墙,还需要在 AWS 控制台中开放新的 SSH 端口。
操作步骤:
-
登录 AWS 管理控制台。
-
进入 EC2 服务。
-
点击「实例」,选择目标服务器。
-
切换到「安全」选项卡。
-
点击对应的安全组。
-
进入「入站规则」。
-
点击「编辑入站规则」。
-
添加新的 TCP 端口规则。
配置示例:
| 配置项 | 设置值 |
|---|---|
| 类型 | 自定义 TCP |
| 协议 | TCP |
| 端口范围 | 2222 |
| 来源 | 我的 IP(推荐) |
为了提高安全性,建议将来源限制为自己的公网 IP,而不是直接设置为 0.0.0.0/0。
注意:此时不要删除原来的 22 端口规则。
需要等待新端口连接测试成功后,再关闭旧端口。
如果使用的是阿里云、腾讯云等云服务器,同样需要在对应的安全组中开放新端口。
七、重启 SSH 服务
修改配置后,需要重新加载 SSH 服务。
1. 查看 SSH Socket 状态
systemctl is-active ssh.socket
如果输出:
active
说明当前系统启用了 SSH Socket。
部分较新版本的 Ubuntu 使用 systemd Socket Activation 管理 SSH 监听端口。
这时可以执行:
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
如果没有使用 SSH Socket,则可以执行:
sudo systemctl restart ssh
注意:对于启用 Socket Activation 的系统,直接重启 ssh 服务不一定能够更新实际监听端口。
2. 检查 SSH 服务状态
sudo systemctl status ssh
也可以检查 Socket 状态:
sudo systemctl status ssh.socket
八、检查新端口是否生效
执行:
sudo ss -tlnp | grep 2222
如果输出类似:
LISTEN 0 4096 0.0.0.0:2222 0.0.0.0:*
表示有程序正在监听 TCP 2222 端口。
还可以执行:
sudo ss -tlnp | grep ssh
查看 SSH 相关监听信息。
注意:端口正在监听并不代表外部一定能够连接成功,还需要检查云服务器安全组、防火墙和网络配置。
九、使用新端口连接 SSH
在 Windows CMD、PowerShell 或 Linux 终端中执行:
ssh -i "vps1.pem" -p 2222 ubuntu@服务器公网IP
命令说明:
-
ssh:建立 SSH 连接。 -
-i:指定 SSH 私钥文件。 -
-p 2222:指定 SSH 连接端口。 -
ubuntu:SSH 登录用户名。 -
服务器公网IP:目标服务器的公网 IP。
如果使用 MobaXterm,修改连接配置即可:
-
打开 MobaXterm。
-
选择 Session → SSH。
-
输入服务器公网 IP。
-
勾选 Specify username,填写
ubuntu。 -
将 Port 修改为
2222。 -
在 Advanced SSH settings 中配置对应的 SSH 私钥。
-
点击 OK 连接。
确认新端口能够正常登录后,说明 SSH 端口修改成功。
十、关闭旧的 22 端口
在确认 2222 端口能够正常远程登录后,可以关闭原来的 22 端口。
1. 删除 AWS 安全组中的 22 端口规则
进入 AWS EC2 安全组入站规则,删除原有的 TCP 22 端口放行规则。
注意:如果使用了其他 SSH 管理方式或自动化工具,需要先确认它们不会受到影响。
2. 删除 UFW 中旧的 SSH 放行规则
如果 UFW 已启用,先查看规则:
sudo ufw status numbered
如果存在 22 端口放行规则,可以执行:
sudo ufw delete allow 22/tcp
如果放行规则以 OpenSSH 应用名称创建,则需要根据实际规则删除:
sudo ufw delete allow OpenSSH
删除前请确认规则内容,避免误删仍然需要的访问权限。
3. 确认 22 端口没有继续监听
sudo ss -tlnp | grep ':22 '
如果没有输出,说明当前没有检测到匹配的 TCP 22 端口监听记录。
建议使用以下命令进一步确认:
sudo ss -tlnp
查看完整监听端口列表,确保 SSH 仅监听预期端口。
十一、常见问题
1. 修改端口后 SSH 无法连接
常见原因包括:
-
AWS EC2 安全组没有开放新端口。
-
Ubuntu UFW 防火墙没有放行新端口。
-
SSH 配置文件没有正确修改。
-
SSH 服务或 Socket 没有重新加载。
-
服务器网络访问控制列表(Network ACL)阻止访问。
-
SSH 实际监听的端口与客户端连接端口不一致。
建议依次检查:
sudo sshd -t
sudo sshd -T | grep '^port '
sudo ss -tlnp
sudo ufw status
2. 修改了 Port 2222,但仍然监听 22 端口
可能是系统启用了 ssh.socket,或者其他 SSH 配置文件包含端口设置。
检查:
systemctl status ssh.socket
sudo grep -RniE '^[[:space:]]*Port[[:space:]]+' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
如果启用了 ssh.socket,检查其生效配置:
systemctl cat ssh.socket
以及:
systemctl show ssh.socket -p Listen
对于启用了 systemd Socket Activation 的 Ubuntu 系统,应确保 Socket 实际监听端口与 SSH 配置一致。
3. 提示 Connection refused
例如:
ssh: connect to host x.x.x.x port 2222: Connection refused
通常表示目标端口没有服务监听,或者连接被主动拒绝。
可以检查 SSH 服务与端口监听状态。
4. 提示 Connection timed out
例如:
ssh: connect to host x.x.x.x port 2222: Connection timed out
通常需要重点检查:
-
AWS 安全组入站规则。
-
Ubuntu 防火墙。
-
网络 ACL。
-
服务器公网 IP 是否正确。
-
网络路由是否正常。
5. 修改 SSH 端口真的更安全吗?
修改默认 SSH 端口能够减少部分针对 22 端口的自动化扫描,但不能抵御有针对性的端口扫描。
建议同时采取以下安全措施:
-
使用 SSH 密钥登录。
-
禁止 root 直接远程登录。
-
在确认密钥登录正常后禁用密码认证。
-
将安全组 SSH 端口限制为可信 IP。
-
定期更新 OpenSSH 和系统安全补丁。
十二、总结
Ubuntu 修改 SSH 默认端口的主要步骤:
-
编辑
/etc/ssh/sshd_config,将端口修改为2222。 -
使用
sshd -t检查配置语法。 -
检查 SSH 最终生效的端口配置。
-
在 Ubuntu 防火墙中放行新端口(如果 UFW 已启用)。
-
在 AWS EC2 安全组中开放新的 TCP 端口。
-
根据系统配置重新加载 SSH 服务或 SSH Socket。
-
检查新端口监听状态。
-
使用新端口测试 SSH 连接。
-
确认登录成功后,关闭旧的 22 端口。
核心原则:先开放新端口,再修改 SSH 配置,验证新端口可以正常登录后,最后关闭旧端口。
这样可以最大程度避免因 SSH 端口修改不当而导致服务器失联。
适用环境: Ubuntu 20.04 / 22.04 / 24.04 及使用 OpenSSH 的相关 Linux 服务器。不同版本的 SSH 服务管理方式可能存在差异,具体以系统实际配置为准。

浙公网安备 33010602011771号