CentOS7 Linux 服务器无法远程 ssh 登陆故障处理
1.问题现象
远程连接 Linux 云服务器报错:Permission denied
注意: 修改此问题需要重启进入救援模式.
涉及云服务器重启操作可能会导致业务中断,请谨慎操作.
根因分析
/etc/security/limits.conf 中的 nofile 用来设置系统允许打开的最大文件数目,如果 nofile 值大于 PermissionDenied.png 内核设置的 fs.nr_open 参数值(默认为 1048576),会导致登录校验错误,导致登录云服务器时提示“Permission denied”。
处理方法
步骤如下:
3.1 进入云服务器的单用户模式
重启云服务器,单击“远程登录”.
按上方向键,阻止系统自动继续,在出现内核选项时按字母键 e 进入内核编辑模式.
找到 linux16 行末尾,删除不需要加载的参数到 ro 参数
修改 ro 为 rw,以读写方式挂载根分区。
并添加 rd.break,然后执行 Ctrl+X。
修改前,如图:
修改后:
3.2 执行以下命令切换至/sysroot 目录
执行以下命令,查询内核的 fs.nr_open 值。
编辑 /etc/security/limits.conf,修改配置的 nofile 值为合理的值,需小于2中查询的 fs.nr_open 值,例如 65535。
编辑 /etc/security/limits.conf,修改配置的 nofile 值为合理的值,需小于2中查询的 fs.nr_open 值,例如 65535
limits.conf 文件实际是 Linux PAM(插入式认证模块,Pluggable Authentication Modules)中 pam_limits.so 的配置文件, 更多详细配置信息请查看 man 手册,执行
man limits.conf
3.3 重启服务器,重试连接云服务器
问题排查结果
初步排查,判断和 sysctl.conf 中的 fs.nr_open 参数设置有关。
默认情况下, fs.nr_open 的值为 1048576, limits.conf 中的 nofile 参数配置的数值 不能大于 1048576。 除非同步修改了 fs.nr_open 值。
如果 nofile 参数值大于 fs.nr_open 的值 就会出现登录闪退的现象,即使密码没有问题。
例如您这台虚拟机:
sysctl -a|grep nr_open , 当前 fs.nr_open 值为 10240000, /etc/security/limits.conf 中的 nofile 值等于 10240000。 可以正常登录.
建议的配置参数
5.1 sysctl.conf 配置参数
5.2 limits.conf 配置参数
5.3 注意事项
建议根据自己的实际情况进行修改。
注意 limits.conf 的 nofile 的值不能大于 fs.nr_open 的参数值,否则即使密码正确也无法远程登陆到云服务器(报错如下: Permission denied).
版权声明: 本文为 InfoQ 作者【Liyuanjie】的原创文章。
原文链接:【http://xie.infoq.cn/article/4c833d647bad23598045dd778】。文章转载请联系作者。
评论