Ubuntu 系统修改 SSH 端口完整操作文档

一、文档说明

本文适用于 Ubuntu 22.10 及以上版本(Ubuntu 23.04/23.10/24.04 均适用),详细介绍如何将 SSH 默认端口 22 修改为别的端口(本文是改成 22222),并解决操作中常见一些 如「ssh.socket 接管端口监听」导致配置不生效的问题,确保 SSH 服务正常运行且端口配置生效。

二、前置准备

  • 权限要求:需使用 root 权限操作(sudo 命令),避免因权限不足导致配置失败。

  • 风险提示:修改端口后,若未正确配置,可能导致 SSH 连接失败,建议操作前保留当前终端连接,避免远程操作时断连。

三、正常修改 SSH 端口操作步骤

3.1 编辑 SSH 主配置文件

执行以下命令,打开 SSH 配置文件 sshd_config:

bash 复制代码
sudo vi /etc/ssh/sshd_config

3.2 修改 Port 配置

在配置文件中找到「Port」相关配置,默认端口为 22,操作如下:

  • 注释原有默认端口:在「Port 22」前添加 # 符号,变为 # Port 22(若没有该配置,直接下一步新增)。

  • 新增自定义端口:在注释行下方添加Port 22222(确保该行无注释,且仅保留一行 Port 配置,避免重复)。

保存并退出 vi 编辑器:按 Esc 键,输入 :wq 后回车(若误操作需放弃保存,输入 :q! 回车)。

3.3 重启 SSH 服务

修改配置后,重启 SSH 服务使配置生效:

bash 复制代码
sudo systemctl restart ssh

3.4 验证端口是否生效

执行以下命令,查看 SSH 服务监听的端口:

bash 复制代码
sudo ss -tulpn | grep sshd

预期结果:显示 SSH 监听 22222 端口(如 LISTEN 0 128 *:22222 *:* users:(("sshd",pid=xxxx,fd=3)))。

四、常见问题:端口修改后仍监听 22 端口

4.1 问题现象

执行 3.3 步骤重启 SSH 服务后,通过 sudo systemctl status ssh 查看服务状态,显示「10s ago restarted」(已成功重启),但执行 3.4 步骤验证时,发现 SSH 仍监听 22 端口,22222 端口未被监听。

4.2 问题根源

Ubuntu 22.10 及以上版本默认启用「systemd 套接字激活(socket activation)」机制,即 ssh.socket 服务会优先监听 22 端口,而非 sshd 进程直接监听。此时,sshd_config 中的 Port 配置会被 ssh.socket 覆盖,导致修改的端口不生效。

验证问题根源:执行以下命令查看 ssh.socket 状态:

bash 复制代码
sudo systemctl status ssh.socket

若输出显示「Active: active (listening)」,说明 ssh.socket 正在运行并接管了端口监听。

4.3 问题解决步骤

步骤1:停止并禁用 ssh.socket 服务

执行以下命令,停止当前运行的 ssh.socket,并禁用其开机自启(避免重启系统后恢复):

bash 复制代码
# 停止 ssh.socket 服务
sudo systemctl stop ssh.socket

# 禁用 ssh.socket 开机自启
sudo systemctl disable ssh.socket

# 重载 systemd 配置,使修改生效
sudo systemctl daemon-reload

步骤2:重新确认 SSH 配置

再次打开 sshd_config 文件,确认 Port 配置正确(仅保留一行 Port 22222,无注释、无重复):

bash 复制代码
sudo vi /etc/ssh/sshd_config

步骤3:验证配置语法(避免格式错误)

执行以下命令,检查 sshd 配置文件语法是否正确(无输出即表示正常):

bash 复制代码
sudo sshd -t

若有报错,根据提示修正配置文件中的格式错误(如端口格式、配置项拼写错误等)。

步骤4:重新重启 SSH 服务

bash 复制代码
sudo systemctl restart ssh

五、最终验证与防火墙配置

5.1 验证端口监听状态

执行以下命令,确认 SSH 已正确监听 22222 端口:

bash 复制代码
# 查看 ssh.socket 状态(应为 inactive)
sudo systemctl status ssh.socket
# 预期输出:Active: inactive (dead)

# 查看 sshd 监听端口
sudo ss -tulpn | grep sshd
# 预期输出:LISTEN 0 128 *:22222 *:* users:(("sshd",pid=xxxx,fd=3))

5.2 本地测试连接

执行以下命令,本地测试 22222 端口是否可正常连接:

bash 复制代码
ssh localhost -p 22222

若能正常登录(输入密码后进入系统),说明端口配置已生效。

5.3 防火墙放行新端口(关键)

Ubuntu 自带 ufw 防火墙默认可能未放行 22222 端口,若远程连接需执行以下命令放行:

bash 复制代码
# 放行 22222/tcp 端口(SSH 基于 TCP 协议)
sudo ufw allow 22222/tcp

# 重载防火墙规则,使放行生效
sudo ufw reload

# 验证防火墙规则(确认 22222 端口已允许)
sudo ufw status

若无需保留 22 端口,可删除 22 端口的放行规则(提升安全性):

bash 复制代码
sudo ufw delete allow 22/tcp
sudo ufw reload

六、补充说明

6.1 关闭 ssh.socket 的影响

很多用户会担心关闭 ssh.socket 影响 SSH 服务,实际影响极小,可放心操作:

  • ✅ 无负面影响:SSH 服务功能完全正常,sshd 会直接监听 22222 端口,连接、认证等操作不受影响。

  • ✅ 配置更可控:后续修改 sshd_config 中的任何配置(如 PermitRootLogin、PasswordAuthentication 等),重启 SSH 后均可立即生效。

  • ⚠️ 微小变化:sshd 从「按需启动」变为「常驻运行」,但仅占用几 MB 内存,对服务器性能无实质影响;且系统开机时 sshd 会直接启动,避免首次连接延迟。

6.2 异常排查(若仍不生效)

若按上述步骤操作后,SSH 仍未监听 22222 端口,可按以下顺序排查:

  1. 检查配置覆盖文件:执行 ls /etc/ssh/sshd_config.d/,若该目录下有包含 Port 配置的文件,删除该文件并重启 SSH 服务。

  2. 检查端口占用:执行 sudo lsof -i :22222,若显示端口被其他进程占用,更换未被占用的自定义端口(如 2222),重新执行上述操作。

  3. 重新检查服务状态:执行 sudo systemctl status ssh,查看服务是否正常运行,若有报错,根据提示排查(如配置文件语法错误、权限不足等)。

七、安全建议

  • 自定义端口建议选择 1024~65535 之间的端口,避免使用 1024 以下的特权端口(需额外权限)和知名服务端口(如 80、443、3389 等)。

  • 定期检查 SSH 登录日志:执行cat /var/log/auth.log,排查异常登录尝试,及时发现安全风险。

  • 建议禁用密码登录,启用密钥登录,进一步提升 SSH 服务安全性(可在 sshd_config 中修改 PasswordAuthentication no)。

八、总结

Ubuntu 22.10 及以上版本修改 SSH 端口时,核心注意点是「ssh.socket 接管端口监听」的问题。按「修改配置→解决 socket 接管问题→重启服务→验证生效→防火墙放行」的流程操作,即可顺利将 SSH 端口从 22 修改为 22222,且确保配置稳定生效。整个过程安全可控,关闭 ssh.socket 无实质负面影响,反而能让 SSH 配置更灵活。

相关推荐
炽天使3282 小时前
龙虾尝鲜记(4)——Ubuntu 笔记本无头服务器全配置
linux·服务器·ubuntu
TLY-101-0102 小时前
工作日记:在win11上开启WSL安装ubuntu,使用VLLM运行ASR模型
linux·ubuntu·ai·vllm
HAPPY酷3 小时前
Ubuntu 中如何启用 root 账户?—— 从 “su: 认证失败” 到成功切换 root 的完整指南
服务器·数据库·ubuntu
指尖在键盘上舞动4 小时前
Cannot find matching video player interface for ‘ffpyplayer‘.解决方案
linux·ubuntu·ffmpeg·psychopy·ffpyplayer
c++之路4 小时前
Vim 完整安装与配置指南(Ubuntu 系统 + Vimplus 增强)
ubuntu·编辑器·vim
kebidaixu5 小时前
VS Code安装 Remote - SSH 扩展
linux·服务器·ssh
MIXLLRED5 小时前
随笔——Ubuntu固定IP方法
ubuntu·网络ip
wongHome5 小时前
Ubuntu的Anaconda环境如何安装安装rasterio
linux·ubuntu
圥忈&&丅佽&&扗虖5 小时前
ubuntu 安装git
linux·git·ubuntu