更新时间:2024-04-18 GMT+08:00

远程连接Linux云服务器报错:Permission denied

问题现象

远程连接Linux云服务器报错:Permission denied

图1 Permission denied
  • 修改此问题需要重启进入救援模式,请评估风险后进行操作。
  • 本节操作涉及云服务器重启操作,可能会导致业务中断,请谨慎操作。

根因分析

/etc/security/limits.conf中的nofile 用来设置系统允许打开的最大文件数目,如果nofile值大于PermissionDenied.png内核设置的fs.nr_open参数值(默认为1048576),会导致登录校验错误,导致登录云服务器时提示“Permission denied”。

处理方法

  1. 进入云服务器的单用户模式。
    以CentOS 7操作系统为例:
    1. 单击“远程登录”。
    2. 单击远程登录操作面板上方的“发送CtrlAltDel”按钮,重启虚拟机。
    3. 按上方向键,阻止系统自动继续,在出现内核选项时按字母键e进入内核编辑模式。
      图2 进入内核编辑模式

      Euler镜像默认对grub文件进行了加密,进入编辑内核模式时会提示:Enter username,需要输入用户和密码,请联系客服获取。

    4. 找到linux16行末尾,删除不需要加载的参数到ro参数。
    5. 修改ro为rw,以读写方式挂载根分区。
    6. 并添加rd.break,然后执行Ctrl+X。
      图3 修改前
      图4 修改后
    7. 执行以下命令切换至/sysroot目录。

      # chroot /sysroot

  1. 执行以下命令,查询内核的fs.nr_open值。

    sysctl fs.nr_open

  2. 编辑 /etc/security/limits.conf,修改配置的nofile值为合理的值,需小于2中查询的fs.nr_open值,例如65535。
    vi /etc/security/limits.conf

    limits.conf 文件实际是Linux PAM(插入式认证模块,Pluggable Authentication Modules)中pam_limits.so 的配置文件。更多详细配置信息请查看man手册,执行:

    man limits.conf

  3. 重启服务器,重试连接云服务器