写点什么

CentOS7 Linux 服务器无法远程 ssh 登陆故障处理

用户头像
Liyuanjie
关注
发布于: 6 小时前
CentOS7 Linux服务器无法远程ssh登陆故障处理

1.问题现象

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



注意: 修改此问题需要重启进入救援模式.

涉及云服务器重启操作可能会导致业务中断,请谨慎操作.

  1. 根因分析

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

  1. 处理方法

步骤如下:

3.1 进入云服务器的单用户模式

  1. 重启云服务器,单击“远程登录”.

  2. 按上方向键,阻止系统自动继续,在出现内核选项时按字母键 e 进入内核编辑模式.



  1. 找到 linux16 行末尾,删除不需要加载的参数到 ro 参数

  2. 修改 ro 为 rw,以读写方式挂载根分区。

  3. 并添加 rd.break,然后执行 Ctrl+X。

修改前,如图:



修改后:



3.2 执行以下命令切换至/sysroot 目录

# chroot /sysroot
复制代码



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

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

  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.3 重启服务器,重试连接云服务器

 

  1. 问题排查结果

初步排查,判断和 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。 可以正常登录.

 

  1. 建议的配置参数

 

5.1 sysctl.conf 配置参数

$ sudo vi /etc/sysctl.conf

vm.swappiness=0net.core.somaxconn=1024net.ipv4.tcp_max_tw_buckets=5000net.ipv4.tcp_max_syn_backlog=1024

vm.max_map_count=2048000vm.overcommit_memory=1fs.nr_open=10240000net.ipv4.tcp_fin_timeout=2
# 下列两个参数说明: 在NAT环境下,开启这两个参数后,一会导致 TCP连接间歇性的出现不通的情况# 客户端通常在NAT环境下,多台终端使用同一个公网ip,无法实现服务端与客户端的一对一连接。# 如果开启此参数服务端会回收处于TIME_WAIT状态的TCP连接(该套接字中客户端为同一个公网地址),导致连接断开。net.ipv4.tcp_tw_reuse=0net.ipv4.tcp_tw_recycle=0
net.ipv4.tcp_syncookies=1net.ipv4.tcp_keepalive_time=600net.ipv4.ip_local_port_range=1024 65000net.ipv4.tcp_max_syn_backlog=262144net.ipv4.tcp_max_tw_buckets=5000net.ipv4.tcp_synack_retries=1net.ipv4.tcp_syn_retries=1net.ipv4.tcp_max_orphans=262144net.ipv4.route.gc_timeout=100net.core.somaxconn=65535net.core.netdev_max_backlog=26214
复制代码

 

5.2 limits.conf 配置参数

$ sudo vi /etc/security/limits.conf

root soft nofile 10240000root hard nofile 10240000* soft nofile 10240000* hard nofile 10240000root soft nproc 10240000root hard nproc 10240000* soft nproc 10240000* hard nproc 10240000
复制代码

 

5.3 注意事项

 

  1. 建议根据自己的实际情况进行修改。

  2. 注意 limits.conf 的 nofile 的值不能大于 fs.nr_open 的参数值,否则即使密码正确也无法远程登陆到云服务器(报错如下: Permission denied).

发布于: 6 小时前阅读数: 4
用户头像

Liyuanjie

关注

还未添加个人签名 2018.11.12 加入

还未添加个人简介

评论

发布
暂无评论
CentOS7 Linux服务器无法远程ssh登陆故障处理