Linux 修改 SSH 端口,重启 SSH 服务报权限不足错误: Permission denied
在 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_config2. 正常权限参考
正常情况下,该文件权限应为 -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_config2. 恢复默认读写权限
chmod 644 /etc/ssh/sshd_config执行完成后,重新查看权限,确认恢复正常,再进行端口修改。
四、第三步:正确修改 SSH 端口(完整操作)
1. 编辑配置文件
用 root/sudo 权限打开配置文件,找到 #Port 22 这一行(默认带#注释):
# 找到该行
#Port 22修改操作:
- 删除前面的#注释符
- 将 22 改为自定义端口(建议 10000-65535 之间的高端口,避开常用端口,避免冲突)
- 示例:改为 Port 28923
# 修改后
Port 289232. 保存退出编辑器
- vim 编辑器:按 Esc,输入:wq,回车保存
- nano 编辑器:按 Ctrl+O 保存,Ctrl+X 退出
五、第四步:重启 SSH 服务+排查 SELinux 权限拦截
修改配置后必须重启 SSH 服务生效,部分 CentOS/RHEL 系统开启 SELinux,会额外拦截自定义 SSH 端口,导致服务启动失败/权限报错。
1. 重启 SSH 服务(分发行版命令)
CentOS7+/RHEL7+/Rocky Linux
sudo systemctl restart sshdUbuntu/Debian
sudo systemctl restart ssh2. 检查 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-ports2. 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 服务器,兼顾安全性和实用性。





