Ubuntu SSH 端口修改指南
项目说明适用系统Ubuntu 24.04 LTSSSH 服务OpenSSH Server系统默认安装原端口22新端口36000示例可根据需要自定义修改方式常规方法修改/etc/ssh/sshd_config 重启服务备选方案systemd 覆写常规方法失效时使用一、背景说明修改 SSH 默认端口22是服务器安全加固的常见措施可以有效减少暴力破解攻击扫描脚本默认只扫 22 端口降低日志中的无效登录尝试数量提升服务器的整体安全性二、前提条件在开始修改前请确保你拥有服务器的root 权限或sudo权限。当前 SSH 连接保持开启非常重要。你已准备好备用连接方式如云控制台 VNC以防修改失误导致无法登录。三、常规修改方法推荐优先使用适用场景大多数情况仅修改配置文件即可生效。3.1 检查当前 SSH 端口sudoss-tlnp|grepssh默认输出LISTEN 0 4096 0.0.0.0:22 0.0.0.0:* users:((sshd,pidxxx,fd3)) LISTEN 0 4096 [::]:22 [::]:* users:((sshd,pidxxx,fd4))3.2 修改 SSH 配置文件sudovim/etc/ssh/sshd_config找到#Port 22这一行修改为Port 36000 # 禁止root远程登录 PermitRootLogin no # 关闭密码登录有密钥再开 PasswordAuthentication no # 禁用空密码 PermitEmptyPasswords no # 最大认证尝试次数防暴力破解 MaxAuthTries 3注意如果文件中有多个Port行只保留一个避免冲突。行首不能有#注释符。快速命令如果你更习惯用命令操作# 删除所有已有的 Port 行sudosed-i/^Port/d/etc/ssh/sshd_config# 添加新端口echoPort 36000|sudotee-a/etc/ssh/sshd_config3.3 测试配置文件语法sudosshd-t无输出配置正确可以继续。有错误输出根据提示修复后再重启。3.4 重启 SSH 服务sudosystemctl restartssh3.5 验证新端口监听sudoss-tlnp|grepssh预期输出LISTEN 0 4096 0.0.0.0:36000 0.0.0.0:* users:((sshd,pidxxx,fd3)) LISTEN 0 4096 [::]:36000 [::]:* users:((sshd,pidxxx,fd4))3.6 验证配置加载sudosshd-T|grep-E^port|^listenaddress预期输出port 36000 listenaddress [::]:36000 listenaddress 0.0.0.0:36000四、systemd 覆写方案备选方案4.1 什么时候使用当常规方法修改后出现以下情况时需要使用 systemd 覆写检查项正常结果异常结果需使用覆写方案sudo sshd -T | grep portport 36000port 22配置未加载sudo ss -tlnp | grep ssh0.0.0.0:360000.0.0.0:22仍监听旧端口sudo systemctl status sshactive (running)正常但端口未变典型场景配置文件中的Port已正确修改但重启后仍监听旧端口。sshd -T显示新端口但ss显示旧端口。systemd 缓存或残留进程导致常规方法失效。4.2 systemd 覆写操作步骤步骤 1创建 systemd 覆写文件sudosystemctl editssh在弹出的编辑器中粘贴以下内容[Service] ExecStart ExecStart/usr/sbin/sshd -D -p 36000参数说明配置项说明ExecStart空行清空默认的启动命令ExecStart/usr/sbin/sshd -D -p 36000指定新启动命令-p 36000强制绑定端口保存并退出CtrlOCtrlX。步骤 2重载 systemd 配置sudosystemctl daemon-reload步骤 3重启 SSH 服务sudosystemctl restartssh步骤 4验证端口监听sudoss-tlnp|grepssh预期输出显示0.0.0.0:36000。步骤 5确认覆写文件已创建ls-la/etc/systemd/system/ssh.service.d/应看到override.conf文件。4.3 何时删除 systemd 覆写当以下情况发生时可以删除覆写文件恢复到常规配置模式你确认常规方法已正常工作即sshd_config中的Port已生效。你想恢复到标准的启动方式避免 systemd 覆写干扰后续配置变更。删除方法sudorm-f/etc/systemd/system/ssh.service.d/override.confsudosystemctl daemon-reloadsudosystemctl restartssh五、防火墙配置5.1 Ubuntu UFW 防火墙# 放行新端口sudoufw allow36000/tcp# 重载防火墙sudoufw reload# 查看已放行端口sudoufw status|grep36000建议在确认新端口可用前不要删除 22 端口的放行规则。5.2 云服务商安全组如果服务器在云上阿里云、腾讯云、AWS、华为云等需在控制台安全组中添加入站规则参数值协议TCP端口36000来源0.0.0.0/0或指定 IP 段六、测试新端口连接这是最关键的一步请务必按以下顺序操作6.1 保持当前 SSH 窗口打开不要关闭当前已连接的 SSH 窗口否则如果新端口配置失败你将失去对服务器的访问。6.2 另开一个新终端测试ssh-p36000用户名服务器IP如果使用密钥登录ssh-p36000-i~/.ssh/id_rsa 用户名服务器IP成功标志输入密码后正常登录看到 shell 提示符。6.3 如果新端口连接失败立即在当前窗口中检查并修复# 检查服务状态sudosystemctl statusssh# 检查端口监听sudoss-tlnp|grepssh# 查看日志sudojournalctl-ussh-n20七、确认成功后清理旧端口可选确认可以通过新端口正常登录后你可以选择移除 22 端口的防火墙规则。sudoufw delete allow22/tcpsudoufw reload⚠️安全建议生产环境建议先保留 22 端口 1~2 天确认新端口完全稳定后再关闭避免因配置遗漏导致失联。八、回滚方案应急8.1 回滚常规配置如果新端口无法连接且当前 SSH 窗口仍保持打开立即执行以下命令恢复# 恢复配置文件中的 Port 22sudosed-i/^Port/d/etc/ssh/sshd_configechoPort 22|sudotee-a/etc/ssh/sshd_config# 测试配置sudosshd-t# 重启 SSH 服务sudosystemctl restartssh# 验证sudoss-tlnp|grepssh8.2 回滚 systemd 覆写如果使用过sudorm-f/etc/systemd/system/ssh.service.d/override.confsudosystemctl daemon-reloadsudosystemctl restartssh然后用旧方式连接ssh用户名服务器IP九、两种方法对比与选择对比项常规方法systemd 覆写方案操作复杂度低仅修改一个配置文件中需创建 systemd 覆写适用场景大多数情况常规方法失效时维护性好配置集中在sshd_config一般配置分散在两处优先级优先使用备用方案何时使用首次修改 SSH 端口sshd -T和ss显示不一致时选择建议首次修改直接使用常规方法。常规方法失败出现sshd -T显示新端口但ss显示旧端口时使用 systemd 覆写。恢复常规使用覆写成功后可考虑删除覆写文件恢复正常模式。十、完整命令汇总常规方法# 1. 修改配置sudosed-i/^Port/d/etc/ssh/sshd_configechoPort 36000|sudotee-a/etc/ssh/sshd_config# 2. 测试配置sudosshd-t# 3. 重启服务sudosystemctl restartssh# 4. 查看监听sudoss-tlnp|grepssh# 5. 防火墙放行sudoufw allow36000/tcpsudoufw reload# 6. 测试连接另开终端ssh-p36000用户名服务器IPsystemd 覆写方案备选# 1. 创建覆写文件sudosystemctl editssh# 粘贴# [Service]# ExecStart# ExecStart/usr/sbin/sshd -D -p 36000# 2. 重载并重启sudosystemctl daemon-reloadsudosystemctl restartssh# 3. 验证sudoss-tlnp|grepssh十一、常见问题排查问题现象可能原因解决方法Connection refused防火墙/安全组未放行新端口检查 UFW 和云安全组规则ssh -T显示port 22而非新端口配置文件未正确保存检查/etc/ssh/sshd_config中是否有Port 36000且未被注释ss显示 22 而非 36000systemd 缓存或残留进程使用 systemd 覆写方案重启 SSH 后无法连接配置错误导致服务启动失败使用云控制台 VNC 登录执行回滚方案端口被其他服务占用与其他服务端口冲突更换端口号或sudo ss -tlnp | grep 36000查看占用进程十二、安装信息汇总项目值SSH 版本OpenSSH Server原端口22新端口36000示例配置文件/etc/ssh/sshd_configsystemd 覆写路径/etc/systemd/system/ssh.service.d/override.conf测试配置sudo sshd -t服务管理sudo systemctl restart ssh测试连接ssh -p 36000 userIP防火墙规则sudo ufw allow 36000/tcp文档版本3.0适用系统Ubuntu 24.04 LTS最后更新2026-07-16