Linux 修改 SSH 端口,重启 SSH 服务报权限不足错误: Permission denied ​

2026-03-26 51 浏览 0 评论

在 Linux 服务器运维中,修改默认 SSH 端口(22)是基础安全加固操作,但很多用户在编辑 sshd_config 配置文件、重启 SSH 服务时,频繁遇到 权限不足(Permission denied) 报错,导致修改失败。本文针对这类权限问题,从故障原因、分步修复、完整操作流程、常见避坑点全维度讲解,适配 CentOS、Ubuntu、Debian 等主流 Linux 发行版,新手也能一步步照着完成。

核心故障原因 :SSH 主配置文件 sshd_config 属于系统核心配置,归属 root 用户权限,普通用户无编辑权限;部分场景还涉及 SELinux 拦截、文件权限异常、防火墙配置权限叠加问题。

一、先确认:SSH 配置文件路径与权限归属

首先定位 SSH 核心配置文件,主流 Linux 发行版路径统一为 /etc/ssh/sshd_config ,先查看文件权限,判断是否为权限归属异常导致的报错。

1. 查看配置文件权限命令


ls -l /etc/ssh/sshd_config

2. 正常权限参考

正常情况下,该文件权限应为 -rw-r--r-- 1 root root ,归属 root 用户和 root 用户组,只有 root 用户具备读写权限,普通用户仅可读,无法直接修改,这是权限不足的核心根源。

3. 异常情况

如果文件归属变为普通用户、权限被篡改(比如只读),也会额外触发权限报错,后续会针对性修复。

二、第一步:切换 root 权限(解决基础权限不足)

普通用户直接编辑文件必然报错,必须获取 root 管理员权限,两种常用方式任选其一:

方式 1:su 切换 root 用户(CentOS/RHEL 常用)


su root

输入 root 密码,切换成功后命令行前缀变为 root@主机名。

方式 2:sudo 临时提权(Ubuntu/Debian/CentOS7+常用)

如果服务器配置了 sudo 权限,直接在命令前加 sudo,无需全程切换 root:


sudo vim /etc/ssh/sshd_config
# 或用 nano 编辑器(新手友好)
sudo nano /etc/ssh/sshd_config

避坑提醒 :千万不要用普通用户直接 chmod 777 修改配置文件权限,会大幅降低服务器安全,极易被恶意入侵,严格用 root/sudo 权限操作即可。

三、第二步:修复 sshd_config 文件权限异常(进阶修复)

如果已经切换 root,依然报权限不足,大概率是文件权限被篡改,执行以下命令恢复默认权限和归属:

1. 恢复文件归属


chown root:root /etc/ssh/sshd_config

2. 恢复默认读写权限


chmod 644 /etc/ssh/sshd_config

执行完成后,重新查看权限,确认恢复正常,再进行端口修改。

四、第三步:正确修改 SSH 端口(完整操作)

1. 编辑配置文件

用 root/sudo 权限打开配置文件,找到 #Port 22 这一行(默认带#注释):


# 找到该行
#Port 22

修改操作:

  • 删除前面的#注释符
  • 将 22 改为自定义端口(建议 10000-65535 之间的高端口,避开常用端口,避免冲突)
  • 示例:改为 Port 28923

# 修改后
Port 28923

2. 保存退出编辑器

  • vim 编辑器:按 Esc,输入:wq,回车保存
  • nano 编辑器:按 Ctrl+O 保存,Ctrl+X 退出

五、第四步:重启 SSH 服务+排查 SELinux 权限拦截

修改配置后必须重启 SSH 服务生效,部分 CentOS/RHEL 系统开启 SELinux,会额外拦截自定义 SSH 端口,导致服务启动失败/权限报错。

1. 重启 SSH 服务(分发行版命令)

CentOS7+/RHEL7+/Rocky Linux


sudo systemctl restart sshd

Ubuntu/Debian


sudo systemctl restart ssh

2. 检查 SSH 服务状态


systemctl status sshd
# Ubuntu/Debian 改为 ssh

如果显示 active (running),说明服务正常;如果报错,继续排查 SELinux。

3. SELinux 权限拦截修复(CentOS/RHEL 专属)

SELinux 开启时,默认只允许 22 端口用于 SSH,自定义端口需添加 SELinux 规则:


# 安装 SELinux 管理工具(未安装的话)
sudo yum install policycoreutils-python-utils -y
# 添加自定义 SSH 端口规则(替换为你的端口)
sudo semanage port -a -t ssh_port_t -p tcp 28923
# 重启 SSH 服务
sudo systemctl restart sshd

六、第五步:防火墙放行自定义端口(避免连接失败)

很多用户忽略防火墙配置,即使 SSH 端口修改成功,防火墙拦截也会导致无法远程连接,同步放行端口:

1. firewalld 防火墙(CentOS/RHEL)


sudo firewall-cmd --permanent --add-port=28923/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports

2. ufw 防火墙(Ubuntu/Debian)


sudo ufw allow 28923/tcp
sudo ufw reload

七、测试连接+常见权限问题汇总

1. 远程连接测试

新开终端,用自定义端口连接服务器,命令格式:


ssh 用户名 @服务器 IP -p 自定义端口

连接成功即说明所有配置生效,权限问题彻底解决。

2. 高频权限不足报错及解决

  • 普通用户直接编辑文件报错 :必须加 sudo 或切换 root
  • root 用户也无法编辑 :文件权限被篡改,执行 chown 和 chmod 恢复
  • 重启 SSH 服务报权限拒绝 :SELinux 拦截,添加端口规则
  • 配置文件只读无法保存 :检查文件是否被锁定,执行 sudo chattr -i /etc/ssh/sshd_config 解锁

八、安全注意事项

  • 自定义 SSH 端口不要用 1-10000 的知名端口,避免端口冲突
  • 严禁将 sshd_config 权限改为 777,保留 644 默认权限即可
  • 修改端口后,务必同步更新服务器安全组、防火墙规则
  • 操作完成后保留当前连接窗口,新开窗口测试,防止配置错误导致无法远程

结语

Linux 修改 SSH 端口报权限不足,本质都是 用户权限不够、文件权限异常、SELinux 拦截 三大类问题,按照本文先提权、再修权限、后改配置、最后放行端口的流程操作,可 100%解决这类故障。全程无需复杂操作,命令可直接复制,适配所有主流 Linux 服务器,兼顾安全性和实用性。


发布评论

发布评论前请先 登录
取消
0 评论
点赞
收藏

评论列表 0

暂无评论