需修改ssh端口以增强安全或规避策略,步骤包括:一、备份并编辑/etc/ssh/sshd_config,设置port为新端口号;二、防火墙放行该端口;三、selinux启用时需添加端口上下文;四、重启sshd并验证监听与连接;五、确认稳定后禁用22端口。

如果您尝试通过SSH连接Linux服务器,但希望避免使用默认的22端口以增强基础安全性或规避网络策略限制,则需要修改sshd服务监听的端口号。以下是修改SSH端口的具体操作步骤:
一、编辑sshd配置文件
OpenSSH服务的端口设置由主配置文件/etc/ssh/sshd_config控制。修改前需确保拥有root权限,并建议先备份原配置文件以防配置错误导致连接中断。
1、使用root用户登录系统,执行命令备份配置文件:cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak。
2、用文本编辑器打开配置文件,例如执行:nano /etc/ssh/sshd_config。
3、在文件中查找包含Port 22的行(可能被注释),取消该行注释(删除开头的#),并将数字22替换为期望的新端口号,例如Port 2222。
4、确保该行未被其他Port指令重复定义,仅保留一条有效Port配置。
二、配置防火墙放行新端口
系统防火墙若启用,必须显式允许新SSH端口的入站TCP连接,否则客户端将无法建立连接。
1、若使用firewalld,执行:firewall-cmd --permanent --add-port=2222/tcp(将2222替换为实际端口号)。
2、重载防火墙规则:firewall-cmd --reload。
3、若使用iptables,执行:iptables -A INPUT -p tcp --dport 2222 -j ACCEPT,并保存规则(如service iptables save或对应持久化命令)。
三、禁用SELinux端口限制(如启用)
SELinux默认仅允许sshd绑定到特定端口(包括22),若新端口不在许可列表中,sshd启动时将拒绝绑定,导致服务失败。
1、检查SELinux状态:sestatus,确认其为enforcing或permissive模式。
2、查询当前SSH允许的端口:semanage port -l | grep ssh。
3、为新端口添加SELinux上下文:semanage port -a -t ssh_port_t -p tcp 2222(2222替换为实际端口号)。
4、若系统未安装policycoreutils-python-utils包,需先安装:yum install policycoreutils-python-utils(CentOS/RHEL)或apt install policycoreutils-python-utils(RHEL系较新版本)。
四、重启sshd服务并验证监听状态
配置更新后必须重启sshd服务使更改生效,并确认进程确实在新端口上监听,同时保持原有连接不中断(OpenSSH默认支持平滑重启)。
1、执行重启命令:systemctl restart sshd。
2、检查服务状态是否正常:systemctl status sshd,确认无error或failed提示。
3、验证监听端口:ss -tlnp | grep ':2222'(2222替换为实际端口号),应显示sshd进程绑定信息。
4、在另一终端窗口尝试用新端口连接:ssh -p 2222 username@server_ip,成功登录即表示生效。
五、测试连接并禁用旧端口(可选)
为彻底迁移至新端口,应在确认新连接稳定可用后,从配置中移除对22端口的监听,防止攻击者仍尝试利用默认端口。
1、再次编辑/etc/ssh/sshd_config,确保文件中仅存在一行有效的Port指令,且值为新端口号;删除或注释掉所有其他Port行(包括Port 22)。
2、重新执行:systemctl restart sshd。
3、运行ss -tlnp | grep ':22',确认无sshd进程监听22端口。
4、更新客户端SSH配置(如~/.ssh/config)或连接脚本,统一使用新端口号。










