服务器上的ssh端口怎么修改端口映射,核心答案就一句话:先改sshd_config里的Port参数并重启sshd服务,再放行新端口对应的防火墙和云安全组规则,最后用ssh -p 新端口测试连通,三条缺一不可。端口映射的本质不是单纯改数字,而是让数据包能沿着新路径找到你的sshd进程,所有环节都打通才算改完,下面按照从服务器到公网的顺序,把每一步拆开讲清楚。
ssh端口怎么修改:先摸清服务器当前状态再动手
改端口最怕的不是命令敲错,而是改完发现自己被踢下线、服务起不来,动手之前先花两分钟确认三件事,能省掉后面大量排查时间。
当前ssh连接必须保持在线
如果手头只有一条ssh会话,建议先开第二个终端登录服务器,确保至少有一条备用连接,改配置、重启服务的过程中会短暂断连,一旦配置文件写错、防火墙没放行,备用连接就是你唯一的抢救通道,行业共识认为,所有服务器变更操作都应该遵循“先备份、再修改、后验证”的顺序,这条规则用在ssh端口修改上同样适用。
确认操作系统和sshd服务管理方式
不同发行版的服务管理命令不一样,直接决定了重启方式:
- CentOS 7及以上、Ubuntu 16.04及以上使用
systemctl restart sshd - CentOS 6及更早版本使用
service sshd restart - Debian系部分系统服务名是
ssh而不是sshd
修改前用ss -lntp | grep sshd看一眼sshd当前监听的端口,默认情况下应该是22,这一步既能确认sshd正常在跑,也能记住原端口,后续改完做对比。
检查SELinux是否开启
CentOS和部分国产化系统默认开启SELinux,它会拦截sshd监听非默认端口,先执行getenforce看结果,如果是Enforcing,就需要给新端口打上SELinux标签:
semanage port -a -t ssh_port_t -p tcp 新端口
没有semanage命令的话先安装policycoreutils-python-utils,不然sshd大概率启动失败,日志里会报Permission denied。
修改sshd_config并重启服务:具体操作步骤
确认完上面三项,就可以正式修改配置文件了,路径一般是/etc/ssh/sshd_config,Ubuntu部分版本还需要检查/etc/ssh/sshd_config.d/目录下的子配置文件,后者优先级更高。
修改Port配置行的完整流程
第一步先备份,这个步骤不能省:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
第二步用vim打开配置文件,找到#Port 22这一行,去掉注释并把数字改掉:
vim /etc/ssh/sshd_config
建议把新端口选在1024到65535之间,避开常见服务端口,比如3306、8080这类容易被占用的端口,改完后保存退出,先别急着重启,用下面这个命令检查语法:
sshd -t
这一步很关键,它能提前发现配置文件的语法错误,避免重启后sshd服务彻底起不来,语法检查通过后再执行重启:
systemctl restart sshd
重启后立即检查监听状态:
ss -lntp | grep 新端口
看到LISTEN状态说明sshd已经在新端口上正常运行,同时确认一下sshd进程是否还保留着旧端口,如果新旧端口同时监听,说明配置文件中Port参数出现了多次定义,需要检查sshd_config.d目录下的覆盖文件,把多余的Port行注释掉。
修改sshd_config后别忘了密码登录和PermitRootLogin相关配置
改端口的同时通常要顺带确认一下PasswordAuthentication和PermitRootLogin的值,如果服务器在公网暴露,强烈建议把PermitRootLogin设为no,用普通用户登录后再su切换,或者直接改为prohibit-password只允许密钥登录,行业内多数安全基线要求都包含这一项,改端口和改登录方式搭配使用,效果比单独改端口好得多。
ssh端口映射安全组怎么配置:以国内主流云平台为例
本地服务改完后,真正的“端口映射”环节才开始,云服务器和外网之间隔着安全组和防火墙两层过滤,不配置好映射规则,新端口在外面永远连不进来。
iptables端口映射的两种方式
对于无云安全组的概念,完全靠iptables裸奔的物理服务器,需要自己添加端口映射规则,两种典型场景:
本机端口映射,把公网来的流量转发到本机sshd新端口:
iptables -t nat -A PREROUTING -p tcp --dport 公网端口 -j REDIRECT --to-port 新端口
内网多台服务器的转发映射,把公网端口映射到内网某台机器的ssh端口:
iptables -t nat -A PREROUTING -p tcp --dport 公网端口 -j DNAT --to-destination 内网IP:22
注意iptables规则重启后默认失效,需要iptables-save持久化,或者写入/etc/rc.local,现在多数发行版都推荐用firewalld或ufw管理防火墙规则,手动iptables规则容易和它们互相覆盖,建议优先使用系统的防火墙管理工具。
云安全组配置路径
简米云、酷番云、华为云的安全组规则配置逻辑完全一致:新建入方向规则,协议选择TCP,端口填写新端口,授权对象填写0.0.0/0或者你的固定IP,以简米云为例,路径是:ECS实例详情页 → 安全组 → 配置规则 → 入方向 → 手动添加,端口范围写
新端口/新端口,授权对象建议写具体IP而不是全网段。
有个细节容易被忽略:云服务器的安全组和系统防火墙是两层独立过滤,安全组放行了新端口,系统防火墙没放行也一样连不上,先把两者都放行,再测试连接,能排除大量干扰因素。
本地端口映射工具:frp和rinetd的使用场景
如果是内网穿透场景,“ssh端口映射”指的是把内网服务器的ssh映射到公网跳板机上,frp是目前使用最广泛的方案,服务端配置:
[ssh] type = tcp local_ip = 内网服务器IP local_port = 22 remote_port = 6000
客户端只需要填跳板机IP和token就能跑起来,这类内网穿透方案对带宽要求不高,ssh操作本身流量很小,体验和直连基本没什么差别,在国内外网服务器管理场景中使用频率相当高。
ssh端口改完连不上怎么办:按顺序逐个排查
改完连不上是家常便饭,不用慌,按下面这个顺序检查,绝大多数问题能在几分钟内定位,根据近年来的运维事故统计,改完连不上的原因主要集中在安全组未放行、SELinux拦截、sshd服务未重启这三个环节。
第一步先测本地端口是否正常监听
在服务器上直接执行:
telnet 127.0.0.1 新端口
如果本地都连不通,问题一定在sshd本身,返回Connection refused说明sshd没监听新端口,回去检查配置和SELinux;返回Connected说明本地没问题,问题出在链路中间。
第二步检查firewalld或ufw是否放行新端口
CentOS用firewalld的话:
firewall-cmd --permanent --add-port=新端口/tcp firewall-cmd --reload firewall-cmd --list-all
Ubuntu的ufw就直接写ufw allow 新端口/tcp,这里和云安全组的区别再强调一遍:安全组放行不等于防火墙放行,很多用户只配了安全组,却忽略了系统防火墙,导致新端口在外网始终不通。
第三步排查云安全组规则是否生效
登录云控制台检查安全组规则列表,确认新端口的入方向规则已经添加且优先级正确,另外用ping命令测试服务器公网IP能通,但telnet 公网IP 新端口不通,基本可以断定是安全组或者中间网络设备拦截,telnet不通但ping通的情况相当常见,多数情况下就是安全组端口没放完整。
ssh端口修改价格和场景延伸:家庭宽带和托管服务器怎么处理
家庭宽带环境下改ssh端口映射主要涉及路由器端口转发,光猫拨号时,需要登录光猫管理页把公网端口转发到内网服务器IP的22端口;路由器拨号时则在路由器的“端口映射
”或“虚拟服务器”页面添加规则,这里有个坑:运营商大内网环境下,公网IP不可达,需要配合DDNS和端口转发一起使用,否则改了端口也映射不出去,ssh端口修改服务价格多少这个问题在运维外包市场里没有统一标准,简单场景几十元就能解决,涉及内网穿透和专线映射的定制方案就高得多。
托管物理服务器场景下,通常由机房提供KVM或IPMI带外管理,改端口前一定确认带外管理可用,万一配置错误导致sshd起不来,还能通过带外通道抢救,IDC机房的防火墙上一般也需要提交工单让网络工程师放行新端口,这一步明显比云服务器安全组慢,建议预留半天以上的变更窗口。
端口映射验证和习惯养成
改完后用下面这套操作完成最终验证:
ssh -p 新端口 用户名@公网IP
连接成功后,执行last查看登录记录,确认来源IP正确,再把/etc/ssh/sshd_config里的Port和ListenAddress再检查一遍,确保没有注释行干扰,建议顺手把新端口写进运维笔记,服务器上不同服务的端口记录越清晰,后续排查问题的成本就越低。
最终结论:ssh端口修改端口映射不是改个配置数字那么简单,而是要依次打通sshd监听、SELinux标签、系统防火墙、云安全组或路由器转发这四层链路。 分层排查的思路比死记命令重要得多,只要每一层的状态都能确认,任何ssh端口连接问题都不会拖太久。
ssh端口怎么修改端口映射的常见问题解答
修改sshd端口后,密码登录被拒绝了怎么办?
检查/etc/ssh/sshd_config中PasswordAuthentication的值是否为yes,以及sshd_config.d目录下有没有覆盖该配置的子文件,Debian系系统容易出现这个情况,子配置里的PasswordAuthentication no会把主配置覆盖掉,修改完记得重启sshd服务。
服务器ssh端口建议用密码登录还是密钥登录?
密钥登录安全性更高,密码登录存在被暴力破解和撞库的风险,而密钥登录只要私钥不泄露,几乎不存在被暴力猜解的可能,行业共识认为,公网暴露的服务器应该优先配置密钥认证,同时关闭密码登录,配置密钥登录后,ssh端口随便改成什么数字都行,双重保护下基本不用再操心被扫描盯上。
ssh端口映射到公网后还是不断被扫描,怎么处理?
把监听端口改成高位随机数,比如5位数的端口,配合MaxAuthTries 3限制尝试次数,再使用fail2ban这类工具自动封禁频繁连接的IP,就算被扫描器扫到,也会因为尝试次数限制和自动封禁而无法进一步操作,服务器安全性已经足够应对绝大多数情况。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/706155.html





