You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改服务器用户权限后SSH报Permission denied (publickey)如何解决

无实例重建的SSH访问恢复方案

SSH公钥认证流程对涉及的路径权限、属主有严格的安全校验规则,只要相关路径权限过宽、属主不匹配,哪怕authorized_keys文件内容完全正确、本地SSH配置无异常,也会直接抛出Permission denied (publickey)报错,和你描述的家目录chmod/chown修改操作的影响完全匹配,按以下方案修复即可:

方案1:使用OCI实例串行控制台修复(优先推荐,无需卸载卷)

OCI平台提供不依赖实例内部sshd服务的底层串行控制台通道,是这类故障最便捷的修复路径:

  • 登录OCI管理控制台,进入目标实例详情页,在侧边「资源」栏选择「控制台连接」,创建新的控制台连接,按提示上传你本地的SSH公钥生成访问凭证
  • 复制控制台给出的SSH连接命令,在本地终端执行即可接入实例的串行操作终端,该通道走OCI管控平面,不受实例内部网络、sshd配置影响
  • 登录实例后,将以下命令中的your_username替换为你实际使用的主登录用户名(OCI默认Oracle Linux用户为opc,Ubuntu为ubuntu),依次执行修复权限:
# 修复家目录属主与基础权限:家目录必须归登录用户所有,权限不得高于755(禁止组/其他用户持有写入权限)
chown -R your_username:your_username /home/your_username
chmod 755 /home/your_username

# 修复.ssh目录权限:必须设置为700,仅登录用户持有读写执行权限
chmod 700 /home/your_username/.ssh
chown -R your_username:your_username /home/your_username/.ssh

# 修复authorized_keys文件权限:必须设置为600,仅登录用户持有读写权限
chmod 600 /home/your_username/.ssh/authorized_keys

# 若误修改过sshd系统配置目录权限,同步修复
chmod 755 /etc/ssh
chmod 600 /etc/ssh/ssh_host_*_key
chmod 644 /etc/ssh/ssh_host_*_key.pub
chmod 644 /etc/ssh/sshd_config

# 重启sshd服务加载配置
systemctl restart sshd
  • 不要关闭当前控制台窗口,本地新开终端窗口使用原SSH连接命令测试,确认可以正常登录后再退出控制台即可。

方案2:救援实例挂载引导卷修复(适用于控制台连接无法使用的场景)

如果串行控制台因为系统配置问题无法登录,可以通过卷挂载的方式离线修复权限:

  • 在OCI控制台将目标实例正常关机(不要选择强制终止),关机后进入实例绑定的引导卷详情页,执行引导卷分离操作
  • 同可用区下新建一个临时的同操作系统类型的救援实例,将刚才分离的引导卷作为数据块卷挂载到该救援实例上
  • 登录临时救援实例,将新挂载的引导卷分区挂载到临时目录(例如/mnt/repair)
  • 参照方案1的权限规则,修复挂载目录下的对应路径:原主用户家目录对应路径为/mnt/repair/home/your_username,.ssh目录对应/mnt/repair/home/your_username/.ssh;如果挂载后属主UID显示异常,可以先执行ls -n /mnt/repair/home查看原用户对应的UID/GID数值,再通过chown -R 原UID:原GID 目标路径设置正确属主
  • 修复完成后卸载引导卷,将其从临时救援实例分离,重新作为系统引导卷挂载回原实例,开机后即可正常通过SSH连接,临时救援实例可直接删除。

关键校验点

很多人修复时只调整.ssh目录和authorized_keys文件的权限,忽略了用户家目录本身也不能给组、其他用户开放写入权限,这是公钥认证校验的必过项,漏改会持续报错。

内容的提问来源于stack exchange,提问作者Arcanist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 02:33:07