从入门到精通:Linux服务器SSH端口修改全攻略

快小二编导 技术教程

SSH(Secure Shell)是Linux服务器管理的“命脉”——通过它,我们可以远程登录服务器执行命令、传输文件,甚至配置系统。但默认的22端口早已成为黑客扫描的“重灾区”:每天有成千上万的自动化脚本尝试暴力破解22端口的root密码,不仅消耗服务器资源,还可能导致数据泄露。

修改SSH端口,是提升服务器安全性的“第一步”,也是最基础的防护手段。本文将从原理科普实操步骤,再到故障排查,手把手教你完成Linux服务器SSH端口的修改,即使是新手也能轻松掌握。

一、为什么要修改SSH默认端口?

在动手之前,我们先搞懂“为什么要改”——知其然,更要知其所以然。

SSH默认端口是22,这个“公开的秘密”让黑客可以通过端口扫描工具(如nmap)快速定位开启SSH服务的服务器,然后发起暴力破解(比如用Hydra工具尝试常见用户名+密码组合)。

修改端口后,能直接过滤掉90%以上的“盲扫攻击”:黑客不知道你的SSH端口号,就无法针对性发起攻击。这就像把你家的门牌号从“22号”改成了一个只有你知道的数字,陌生人自然找不到入口。

此外,修改端口还能避免与其他服务的端口冲突(虽然22端口冲突概率低,但多一份准备总没错)。

二、修改前的准备工作

在修改端口前,必须做好以下3件事,否则可能导致无法远程连接服务器(这是新手最容易踩的坑!):

1. 确认服务器操作系统

不同Linux发行版的SSH配置文件路径可能不同:

  • Debian/Ubuntu/etc/ssh/sshd_config
  • CentOS/RHEL/Fedora/etc/ssh/sshd_config(与Debian系一致,只是部分系统可能需要额外操作防火墙)
  • SUSE/etc/ssh/sshd_config

本文以CentOS 7Ubuntu 20.04为例,覆盖绝大多数场景。

2. 选择新的SSH端口号

端口号范围是0~65535,但有3类端口不能随便用:

  • 0~1023:系统保留端口(如80是HTTP、443是HTTPS),需要root权限才能使用,不建议选;
  • 1024~49151:注册端口(可能被其他服务占用,比如3306是MySQL);
  • 49152~65535:动态/私有端口(几乎不会被系统服务占用,优先选这里的端口)。

推荐选择:比如222233334567等容易记住的端口(避免选10000以内的,减少被扫描概率)。

小技巧:用netstat -tuln | grep 端口号检查端口是否被占用。比如检查2222是否可用:

netstat -tuln | grep 2222

如果没有输出,说明端口未被占用。

3. 确保有服务器物理访问权限(或VNC控制台)

修改端口后如果配置错误,可能导致远程SSH连接失败。此时需要通过服务器物理终端或云服务商提供的VNC控制台(如阿里云ECS、腾讯云CVM的“远程连接”功能)登录服务器修复,所以一定要提前确认能通过这些方式访问。

三、修改SSH端口的详细步骤

步骤1:编辑SSH配置文件

首先,用文本编辑器(如vinano)打开SSH配置文件。这里以vi为例(新手推荐nano,更直观):

对于CentOS/Ubuntu:

vi /etc/ssh/sshd_config

打开文件后,找到Port 22这一行(如果被注释掉了,前面会有#)。

注意:如果文件中没有Port 22,说明默认使用22端口,直接添加新的端口即可。

步骤2:添加/修改端口号

Port 22这一行下面,先添加新的端口(比如2222),不要直接删除22端口!

为什么?因为如果直接删除22端口,配置错误后会无法通过SSH连接。先保留22端口,等新端口测试成功后,再删除22端口更安全。

修改后如下:

随机图片

#Port 22  # 如果原来有注释,保持不变也可以
Port 2222  # 新增的端口
Port 22    # 保留原端口,测试成功后删除

小提示vi编辑器中,按i进入编辑模式,修改后按Esc,输入:wq保存退出。如果用nano,按Ctrl+O保存,Ctrl+X退出。

步骤3:配置防火墙(关键!)

新端口必须在防火墙中“放行”,否则外部无法通过新端口连接SSH。不同系统的防火墙工具不同:

(1)CentOS 7及以上(使用firewalld)

查看当前防火墙状态:

systemctl status firewalld

如果显示active (running),说明防火墙已开启,需要添加新端口:

# 永久开放2222端口(SSH)
firewall-cmd --add-port=2222/tcp --permanent
# 重新加载防火墙规则
firewall-cmd --reload
# 验证端口是否开放
firewall-cmd --list-ports

如果防火墙未开启(显示inactive),可以忽略这一步,但建议开启防火墙提升安全性:

systemctl start firewalld
systemctl enable firewalld

(2)Ubuntu 20.04及以上(使用ufw)

查看ufw状态:

ufw status

如果显示active,添加新端口:

# 允许2222端口的TCP连接
ufw allow 2222/tcp
# 重新加载规则(可选,ufw会自动生效)
ufw reload
# 验证
ufw status

如果ufw未开启,开启并设置开机自启:

ufw enable
ufw default deny incoming  # 默认拒绝所有入站连接
ufw default allow outgoing # 默认允许所有出站连接

(3)其他系统(如Debian 9以下,使用iptables)

如果系统用iptables管理防火墙,执行:

# 允许2222端口入站
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
# 保存规则(不同系统保存方式不同)
# CentOS:service iptables save
# Debian:iptables-save > /etc/iptables/rules.v4

步骤4:重启SSH服务

修改配置后,必须重启SSH服务才能生效:

CentOS/RHEL/Fedora:

systemctl restart sshd
# 验证服务状态
systemctl status sshd

Ubuntu/Debian:

systemctl restart ssh
# 验证状态
systemctl status ssh

如果重启失败,检查配置文件是否有语法错误(比如端口号格式错误),可以用sshd -t命令检测:

sshd -t

如果输出为空,说明配置文件无错误;如果有错误,会提示具体行号。

步骤5:测试新端口连接

这是最关键的一步——必须先验证新端口能正常连接,再删除原22端口!

打开新的终端(不要关闭当前连接!),用新端口连接服务器:

ssh 用户名@服务器IP -p 2222

比如你的服务器IP是192.168.1.100,用户是root,端口是2222,则命令为:

ssh root@192.168.1.100 -p 2222

如果能成功登录,说明新端口配置有效;如果连接失败,检查防火墙是否放行、端口是否被占用、配置文件是否正确。

步骤6:删除原22端口(可选但推荐)

确认新端口可用后,回到服务器,再次编辑sshd_config文件,删除或注释掉Port 22这一行:

vi /etc/ssh/sshd_config

修改后:

Port 2222  # 只保留新端口
# Port 22  # 注释或删除原端口

然后重启SSH服务:

# CentOS
systemctl restart sshd
# Ubuntu
systemctl restart ssh

最后,记得在防火墙中删除22端口的规则(如果之前开放过):

  • CentOS:firewall-cmd --remove-port=22/tcp --permanent && firewall-cmd --reload
  • Ubuntu:ufw delete allow 22/tcp

四、常见问题与故障排查

修改端口后,可能会遇到以下问题,这里提供解决方案:

1. 新端口无法连接,提示“Connection refused”

  • 原因1:SSH服务未监听新端口。用netstat -tuln | grep sshd检查:
    正常输出应包含0.0.0.0:2222(表示监听所有IP的2222端口)。如果没有,检查sshd_config中是否添加了Port 2222,并重启SSH服务。
  • 原因2:防火墙未放行新端口。重新执行防火墙开放命令,确保端口在firewall-cmd --list-portsufw status中显示。
  • 原因3:云服务器安全组未开放端口。如果是阿里云、腾讯云等云服务器,除了系统防火墙,还需要在安全组规则中添加“入站规则”,允许TCP 2222端口访问(这是新手最容易忽略的点!)。

2. 重启SSH服务失败,提示“Bad configuration option”

  • 原因sshd_config文件有语法错误(比如端口号写成字母、重复端口等)。
  • 解决:用sshd -t命令检查错误位置,比如:
    sshd -t
    # 输出示例:/etc/ssh/sshd_config line 10: Bad configuration option: Portt

    这里提示第10行的Portt拼写错误,修正为Port即可。

3. 连接时提示“Permission denied”

  • 原因1:用户名或密码错误。确认输入的用户名和密码正确。
  • 原因2:SSH配置禁止root登录。检查sshd_configPermitRootLogin是否为yes(如果需要root登录)。
  • 原因3:SELinux限制(CentOS常见)。如果SELinux开启,可能阻止新端口的SSH连接,执行以下命令临时关闭SELinux测试:
    setenforce 0

    如果能连接,说明是SELinux问题,需要添加SELinux规则允许新端口:

    semanage port -a -t ssh_port_t -p tcp 2222

    (如果没有semanage命令,先安装policycoreutils-pythonyum install policycoreutils-python

五、额外安全建议

修改SSH端口只是“基础防护”,要进一步提升服务器安全,还需要做这些:

  1. 禁用root直接登录:在sshd_config中设置PermitRootLogin no,用普通用户登录后再sudo提权。
  2. 使用SSH密钥登录:禁用密码登录,改用密钥对(更安全,避免暴力破解)。
  3. 限制登录IP:在sshd_config中设置AllowUsers 用户名@允许的IP,比如AllowUsers admin@192.168.1.0/24,只允许特定IP段登录。
  4. 定期更新系统:及时安装安全补丁,减少漏洞被利用的风险。

总结

修改Linux服务器SSH端口,是一个“简单但关键”的操作——它能有效降低暴力破解的风险,提升服务器安全性。整个过程分为“选端口→改配置→开防火墙→测连接→删旧端口”5步,核心是先保留原端口测试,再删除,避免连接中断。

记住:安全是一个持续的过程,修改端口只是第一步,结合密钥登录、防火墙规则、SELinux等措施,才能构建更坚固的服务器防护体系。

现在,你已经掌握了修改SSH端口的全部技巧,快去给自己的服务器“换个门牌号”吧!

0 15309

留言0

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
验证码