
Linux系统修改SSH默认22端口完整教程(安全高效版)
一、修改前准备工作
权限准备:操作需使用root权限(或具有sudo权限的用户),所有修改配置文件、重启服务的命令均需提升权限,避免因权限不足导致操作失败。这与Linux系统息息相关。
端口选择:选择新的SSH端口,需遵循以下原则:端口号范围为1024-65535(1-1023为系统知名端口,易与其他服务冲突,不推荐使用);优先选择冷门端口(如2222、2022、22022等),降低被扫描的概率;避免使用已被其他服务占用的端口(如80、443、3306等)。
连接备份:修改过程中,切勿关闭当前SSH会话,需新开一个终端窗口进行操作测试。若修改出错,可通过原会话回滚配置,避免远程连接彻底中断(云服务器可通过控制台登录兜底)。
工具准备:需使用文本编辑器(如vim、nano)编辑配置文件,大部分Linux系统默认自带,若未安装可通过对应包管理器安装(如Ubuntu安装nano:sudo apt install nano)。
二、详细修改步骤(通用版)
步骤1:备份SSH配置文件(关键!)
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
步骤2:编辑SSH配置文件,修改端口
# 使用vim编辑配置文件 sudo vim /etc/ssh/sshd_config # 若使用nano,执行以下命令 # sudo nano /etc/ssh/sshd_config
若找到“#Port 22”:删除前面的#号(取消注释),将22改为选定的新端口(如2222),修改后为“Port 2222”。
若未找到“Port 22”:在文件开头或“#Port 22”注释行下方,新增一行“Port 2222”(2222替换为你的新端口)。
vim编辑器:按Esc键,输入“:wq”,按Enter键(w表示保存,q表示退出)。
nano编辑器:按Ctrl+O(保存),按Enter确认,再按Ctrl+X(退出)。
sudo sshd -t
步骤3:配置防火墙,放行新端口
情况1:CentOS/RHEL系统(使用firewalld防火墙)
# 放行新端口(以2222为例,tcp协议,永久生效) sudo firewall-cmd --permanent --add-port=2222/tcp # 重新加载防火墙规则,使配置生效 sudo firewall-cmd --reload # 验证新端口是否已放行 sudo firewall-cmd --list-ports
情况2:Ubuntu/Debian系统(使用ufw防火墙)
# 放行新端口(以2222为例,tcp协议) sudo ufw allow 2222/tcp # 重新加载防火墙(若ufw未启用,先执行sudo ufw enable启用) sudo ufw reload # 验证防火墙状态及端口放行情况 sudo ufw status
情况3:通用(使用iptables防火墙)
# 放行新端口(以2222为例,tcp协议) sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT # 保存iptables规则(避免重启系统后失效) sudo iptables-save > /etc/iptables/rules.v4 # 验证规则是否生效 sudo iptables -L -n
补充:云服务器需配置安全组
步骤4:处理SELinux限制(CentOS/RHEL系统专属)
# 1. 检查当前SELinux状态(若显示enforcing,说明已启用) sudo sestatus # 2. 查看SELinux允许的SSH端口 sudo semanage port -l | grep ssh # 3. 新增新端口(以2222为例)到SELinux的SSH端口列表 sudo semanage port -a -t ssh_port_t -p tcp 2222 # 若提示semanage命令不存在,先安装相关工具 # sudo yum install policycoreutils-python-utils (CentOS/RHEL) # sudo apt install policycoreutils-python-utils (Ubuntu/Debian) # 4. 再次验证,确认新端口已添加 sudo semanage port -l | grep ssh
步骤5:重启SSH服务,应用配置
# 通用命令(systemd系统,大部分主流系统适用) sudo systemctl restart sshd # 部分Ubuntu/Debian系统,服务名为ssh,执行: sudo systemctl restart ssh # 验证SSH服务状态,确认重启成功 sudo systemctl status sshd
步骤6:测试新端口连接(关键验证)
保持原SSH会话不关闭(防止测试失败无法回滚),新开一个终端窗口。
执行连接命令,指定新端口(以2222为例,替换为你的新端口):
ssh 用户名@服务器IP -p 2222输入服务器密码,若能成功登录,说明新端口配置生效;若登录失败,需排查防火墙、SELinux、安全组等配置。
- CDNrsvcB1lDctjW8nbb" data-list="number">
测试成功后,可回到sshd_config配置文件,删除或注释“Port 22”行,再次重启SSH服务,彻底关闭22端口(可选,建议测试稳定后再操作)。
三、常见问题排查(新手必看)
问题1:修改端口后,SSH服务无法启动
排查方法1:执行sudo sshd -t,检查配置文件语法,根据报错修改错误(如端口号填写非数字、配置项拼写错误)。
排查方法2:检查新端口是否被其他服务占用,执行sudo netstat -tulnp | grep 新端口(如2222),若有输出,说明端口被占用,需更换新端口。
排查方法3:CentOS/RHEL系统,检查SELinux是否允许新端口,执行sudo semanage port -l | grep ssh,若新端口不在列表中,重新执行添加SELinux端口的命令。
问题2:新端口无法连接,提示“Connection refused”或“超时”
排查方法1:检查系统防火墙规则,确认新端口已放行(对应步骤3的验证命令)。
排查方法2:云服务器需检查安全组,确认新端口入方向已放行。
排查方法3:检查SSH服务是否监听新端口,执行sudo ss -tlnp | grep sshd,若输出中包含新端口,说明监听正常;若不包含,重新检查sshd_config配置并重启服务。
问题3:忘记新端口,无法远程连接
问题4:修改端口后,密钥登录失效
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
四、安全优化补充建议
禁用密码登录,启用密钥登录:生成SSH密钥对,将公钥上传到服务器,修改sshd_config文件,设置PasswordAuthentication no,重启SSH服务,避免密码被暴力破解。
限制登录用户:修改sshd_config文件,添加AllowUsers 用户名(如AllowUsers root test),仅允许指定用户远程登录。
限制登录IP:通过防火墙或安全组,仅允许特定IP地址访问SSH端口,避免无关IP扫描攻击。
定期更新系统和SSH服务:执行sudo yum update(CentOS)或sudo apt update && sudo apt upgrade(Ubuntu),修复系统漏洞和SSH服务安全隐患。





