Bootstrap

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

1.问题现象

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

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

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

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

步骤如下:

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

修改前,如图:

 

修改后:

 

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

# chroot /sysroot

sysctl fs.nr_open
# vi /etc/security/limits.conf

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配置参数

$ sudo vi /etc/sysctl.conf


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


vm.max_map_count=2048000
vm.overcommit_memory=1
fs.nr_open=10240000
net.ipv4.tcp_fin_timeout=2

# 下列两个参数说明: 在NAT环境下,开启这两个参数后,一会导致 TCP连接间歇性的出现不通的情况
# 客户端通常在NAT环境下,多台终端使用同一个公网ip,无法实现服务端与客户端的一对一连接。
# 如果开启此参数服务端会回收处于TIME_WAIT状态的TCP连接(该套接字中客户端为同一个公网地址),导致连接断开。
net.ipv4.tcp_tw_reuse=0
net.ipv4.tcp_tw_recycle=0

net.ipv4.tcp_syncookies=1
net.ipv4.tcp_keepalive_time=600
net.ipv4.ip_local_port_range=1024 65000
net.ipv4.tcp_max_syn_backlog=262144
net.ipv4.tcp_max_tw_buckets=5000
net.ipv4.tcp_synack_retries=1
net.ipv4.tcp_syn_retries=1
net.ipv4.tcp_max_orphans=262144
net.ipv4.route.gc_timeout=100
net.core.somaxconn=65535
net.core.netdev_max_backlog=26214

 

5.2 limits.conf配置参数

$ sudo vi /etc/security/limits.conf


root soft nofile 10240000
root hard nofile 10240000
* soft nofile 10240000
* hard nofile 10240000
root soft nproc 10240000
root hard nproc 10240000
* soft nproc 10240000
* hard nproc 10240000

 

5.3 注意事项