解决 ubuntu server 24中 SSH 服务修改端口不生效的问题

在这里插入图片描述

今天在修改新装的一台 ubuntu server 24 的SSH端口的时候,如图所示一直不生效,SSH 服务在修改 Port 616 后未生效,且日志明确显示仍在监听 22 端口(Server listening on :: port 22),但配置文件中已正确设置了 Port 616。以下是具体分析和解决方案:


问题原因

  1. ssh.socket 的干扰

    • 日志中显示 TriggeredBy: ssh.socket,说明 SSH 服务被 systemd 的 socket 机制控制。
    • socket 激活模式会强制监听默认端口(22),导致 sshd_config 中的 Port 616 被忽略。
  2. 配置未完全加载

    • 虽然执行了 systemctl restart sshd,但未禁用 ssh.socket,导致服务仍按旧配置运行。

解决方案

1. 禁用 ssh.socket(关键步骤)
sudo systemctl stop ssh.socket   # 停止 socket 监听
sudo systemctl disable ssh.socket  # 禁止开机自启
2. 强制重启 SSH 服务
sudo systemctl restart sshd  # 重新加载配置
3. 验证端口是否生效
sudo ss -tulnp | grep sshd
  • 正常输出应显示
    tcp   LISTEN 0      128      *:616      *:*    users:(("sshd",pid=2345,fd=3))
    
4. 检查服务状态
sudo systemctl status sshd
  • 确认日志中无 port 22 字样,且显示 Server listening on :: port 616

为什么需要重启?

  • ssh.socket 的顽固性
    systemd 的 socket 激活机制会持续监控默认端口(22),即使重启服务也可能被重新拉起。
    必须彻底禁用 ssh.socket 才能让 Port 616 生效

长期配置建议

  1. 显式关闭默认端口
    sshd_config 中注释 Port 22,避免冲突:

    #Port 22   # 注释掉默认端口
    Port 616    # 取消注释并确保唯一
    
  2. 防火墙放行新端口

    sudo ufw allow 616/tcp   # Ubuntu
    sudo firewall-cmd --add-port=616/tcp --permanent && sudo firewall-cmd --reload  # CentOS
    
  3. 重启系统(最终保障)

    sudo reboot
    
    • 确保所有配置在开机时正确加载。

总结

  • 直接原因ssh.socket 强制占用 22 端口,覆盖了 sshd_config 的配置。
  • 修复方法:禁用 ssh.socket + 重启服务(或系统)。
  • 验证命令ss -tulnp | grep sshdjournalctl -u sshd

执行上述步骤后,Port 616 将确定生效。如果仍有问题,可能是 SELinux/AppArmor 限制,需进一步检查安全策略。


附说明

1. 禁用 ssh.socket 的直接影响

(1)服务启动方式变化
  • 当前状态(图片中可见):
    TriggeredBy: ssh.socket  # 显示 SSH 服务由 socket 激活机制控制
    
    • 此时 SSH 服务 不持续运行,仅在收到连接请求时通过 ssh.socket 唤醒。
  • 禁用后
    • SSH 服务将改为 常驻运行(传统模式),直接监听配置文件中指定的端口(如 616)。
(2)端口监听行为
  • 当前问题
    即使 sshd_config 设置了 Port 616,日志仍显示 Server listening on :: port 22,说明 ssh.socket 强制覆盖了配置。
  • 禁用后
    SSH 服务会严格遵循 sshd_config 的端口设置(如 616),不再被 22 端口绑定。

2. 潜在风险与注意事项

(1)连接延迟(理论风险)
  • socket 模式优点:按需启动服务,节省资源。
  • 禁用后:服务常驻运行,可能轻微增加内存占用(约 1-2MB,如图中 Memory: 1.4M),但对现代服务器影响可忽略。
(2)依赖 socket 的特殊场景
  • 若系统有其他服务依赖 ssh.socket 的按需启动特性(极少见),可能导致意外行为。
  • 解决方案
    可改用 ssh@.service 模板服务(需手动配置)。

3. 长期维护建议

  • 保留 socket 的替代方案(如需):
    sshd_config 中同时保留 22616 端口:
    Port 22
    Port 616
    
    然后仅禁用 ssh.socket,这样可通过任意端口连接。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值