在 Linux 系统中,默认的 SSH 端口是 22,但为了增强安全性,建议将其更改为其他端口(如 2222、5000 等)。以下是详细的操作步骤和注意事项:
步骤 1:检查当前 SSH 端口
ss -tulnp | grep sshd
或
grep Port /etc/ssh/sshd_config
如果输出类似 Port 22,说明当前 SSH 端口是 22。
步骤 2:修改 SSH 配置文件
使用 vim 或 nano 编辑 /etc/ssh/sshd_config:
sudo vim /etc/ssh/sshd_config
找到 #Port 22(默认是注释状态),取消注释并修改为:
ini
Port 2222 # 替换为你想要的端口(如 2222、5000 等)
⚠️ 注意:
· 不要删除 Port 22 行,先保留它作为备份,测试新端口后再删除。
· 端口范围:建议选择 1024-65535(避免与系统服务冲突)。
步骤 3:放行新端口的防火墙
1. 如果使用 ufw(Ubuntu/Debian)
sudo ufw allow 2222/tcp # 放行新端口sudo ufw reload
2. 如果使用 firewalld(CentOS/RHEL)
sudo firewall-cmd --permanent --add-port=2222/tcpsudo firewall-cmd --reload
3. 如果使用 iptables
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPTsudo service iptables save # 保存规则(部分系统需手动)
步骤 4:重启 SSH 服务
sudo systemctl restart sshd # 大多数系统#
或
sudo service ssh restart # 旧版系统
检查状态:
sudo systemctl status sshd
步骤 5:测试新端口
先不要关闭当前 SSH 会话! 新开一个终端测试:
ssh username@服务器IP -p 2222
如果连接成功,说明新端口生效。
步骤 6:禁用默认的 22 端口(可选)
确认新端口可用后,返回 /etc/ssh/sshd_config,注释或删除 Port 22:
ini
#Port 22 # 注释或删除此行
再次重启 SSH:
sudo systemctl restart sshd
⚠️ 重要:确保防火墙已拒绝 22 端口:
sudo ufw deny 22/tcp # ufwsudo firewall-cmd --remove-port=22/tcp --permanent # firewalld
步骤 7:验证端口更改
ss -tulnp | grep sshd
应显示新端口(如 2222),而不再有 22。
常见问题与解决方案
1. 连接失败,提示 Connection refused
· 检查防火墙是否放行新端口。
· 确认 SSH 服务正在运行:
sudo systemctl status sshd
2. 修改后无法登录
· 不要退出当前 SSH 会话,直到新端口测试成功。
· 如果锁死,通过 VNC 或云控制台 恢复配置。
3. 端口冲突
· 检查端口是否被占用:
· sudo netstat -tulnp | grep 2222
· 更换为其他端口(如 5000)。
4. SELinux 阻止新端口(CentOS/RHEL)
sudo semanage port -a -t ssh_port_t -p tcp 2222
总结
步骤 | 操作 | 命令示例 |
1. 检查当前端口 | ss -tulnp | grep sshd | - |
2. 修改配置 | 编辑 /etc/ssh/sshd_config | Port 2222 |
3. 放行防火墙 | ufw/firewalld/iptables | ufw allow 2222 |
4. 重启 SSH | systemctl restart sshd | - |
5. 测试连接 | ssh -p 2222 user@IP | - |
6. 禁用旧端口 | 注释 Port 22,重启 SSH | - |
安全建议:
· 使用 密钥登录 替代密码(PasswordAuthentication no)。
· 启用 Fail2Ban 防止暴力破解。
· 定期检查 /var/log/auth.log 监控登录尝试。
目前有0 条留言