使用SSH远程连接Linux系统的ECS实例时,提示“could not set limit for ‘nofile’: Operation not permitted”错误怎么办?
使用SSH远程连接Linux系统的ECS实例时,提示“could not set limit for ‘nofile’: Operation not permitted”错误的原因和解决方案。
ssh 的时候,能够进入输入密码阶段,但是输入正确的密码之后,还是无法登录。
要搞清楚ssh无法连接的原因 首先要先排查SSH基础的配置是否完整以及服务是否安装
1.首先查看centos7上是否装了openssh-server,如果你是卸载的openssh然后重新安装,可能卸载的时候把openssh-server给卸载了但是安装openssh时却没有安装openssh-server。所以导致ssh连接出错,如果你是源码包安装的openssh,卸载的时候可能将openssh-server一起卸载了。(yum install -y xxx只能安装系统自带的openssh-7.4p1的版本)。事实上系统自带的openssh-7.4p1版本的带有openssh-7.4p1、openssh-clients-7.4p1、openssh-server-7.4p1
检查系统本地有没有openssh-clients和openssh-server可以使用如下命令查看
rpm -qa|grep openssh
yum list installed |grep openssh
如果显示没有安装可以使用
yum install -y openssh-server
或
yum install -y openssh-clients
进行安装
2.编辑/etc/ssh/sshd_config 配置文件,将文件中的ssh监听的22端口、监听地址前的注释#去掉,然后开启允许root账户远程登录、以及开启用户名密码作为连接验证。然后保存退出
然后开启sshd服务,查看ssh进程和端口号
sudo service sshd start #开启sshd服务
ps -ef |grep sshd #检查sshd进程
netstat -an |grep 22 #检查22端口号是否开启监听
systemctl status sshd #查看ssh服务状态是否开启
设置开机自启动ssh服务
systemctl enable sshd.service #设置开机自启动服务
systemctl list-unit-files |grep sshd #查看是否开启sshd服务自启动
chkconfig sshd on #设置ssh服务为开机启动命令
chkconfig sshd off #设置ssh服务禁止开机自启动命令
service sshd stop #停止ssh服务命令
3.如果以上两项都检查过了没问题那可能就是配置的静态地址的问题
首先看一下centos系统的ip地址
ip add
或
ifconfig
然后检查配置的静态地址是否跟ifconfig的ens33网卡地址一样
vi /etc/sysconfig/network-scripts/ifcfg-ens33
如果配置的静态地址跟系统显示的地址不一样,可能是配置完成是没有重启网络,需要重启一下网络,这样地址就对上了。
systemctl restart network
然后再重启sshd服务
systemctl restart sshd
再发起ssh连接这个时候就可以连接了。
5.如果还不行,检查 /etc/hosts.deny 和 /etc/hosts.allow 文件中有没有限制sshd协议,如果有删除sshd协议在某个IP范围内在/etc/hosts.deny跟/etc/hosts.allow中的配置
vi /etc/hosts.deny
vi /etc/hosts.allow
6.有可能是sshd_config配置文件限制了root用户登录
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
#或
sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config
#将PasswordAuthentication置为yes
echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config
#或
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/g' /etc/ssh/sshd_config
7.配置认证
#可能升级ssh后,/etc/pam.d.sshd配置文件覆盖了,可以从没升级ssh之前的机器拷贝该文件内容到该目录下,拷贝前先备份现在的sshd文件
cat /etc/pam.d/sshd
cd /etc/pam.d
mv sshd sshd.bak
8.更改etc/ssh下的文件的ssh_host_dsa_key、ssh_host_ecdsa_key、ssh_host_ed25519_key、ssh_host_rsa_key等key文件的权限 这些目录下的这些key文件权限太高了 把这些key文件权限改为600
cd /etc/ssh
chmod 600 ssh_host_dsa_key
chmod 600 ssh_host_ecdsa_key
chmod 600 ssh_host_ed25519_key
chmod 600 ssh_host_rsa_key
9.关闭selinux
setenforce 0 #临时关闭selinux
#找到SELINUX=enforcing,按i进入编辑模式,将参数修改为SELINUX=disabled即可(永久关闭)
vi /etc/selinux/config
SELINUX=disabled
#或
sed -i -e "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
#查看selinux是否关闭,显示Disabled为关闭
getenforce
10.使用ssh连接的xshell版本太低
如果升级ssh版本之后无法连接,请更新xshell版本到5版本以上,再发起ssh连接应该就可以了。
11.查看是否是设置了防火墙拒绝该地址进行连接。
例如:
#设置只允许192.168.6.0网段的允许访问本机的22端口
iptables -I INPUT -s 192.168.6.0/24 -p tcp --dport 22 -j ACCEPT
#再设置其他IP拒绝访问本机22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#查看itables规则
iptables -L
12.确认是否有安装openssl,当我们只升级openssh,(其他原因不能升级openssl)时
使用rpm包安装openssh的时候,没有使用rpm包安装openssl的时候需要像以下这样做。
升级openssh-8.9p1前的备份
ssh -V #查看openssh跟openssl的版本
openssl version #查看真正在使用的openssl的版本
#备份openssh的相关目录
cp -r /etc/ssh{,.back`date "+%Y%m%d"`}
cp /etc/pam.d/sshd{,.back`date "+%Y%m%d"`}
cp /usr/bin/ssh{,.back`date "+%Y%m%d"`}
#升级openssh
rpm -Uvh --nodeps --force openssh-8.9p1-1.el7.x86_64.rpm
rpm -Uvh --nodeps --force openssh-clients-8.9p1-1.el7.x86_64.rpm
rpm -Uvh --nodeps --force openssh-server-8.9p1-1.el7.x86_64.rpm
这时候升级的时候会提示报错,因为正确的升级顺序是需要先升级openssl,因为openssh-8.0p1版本及以上依赖openssl-1.1.1系列
查看openssh的日志
systemctl status sshd
#或
cd /var/log
cat messages
方法1:卸载新安装的openssh-8.9p1版本
rpm -qa |grep openssh #查看已经安装的openssh的rpm包
#卸载openssh8.9版本
rpm -e nodeps openssh-clients-8.9p1-1.el7.x86_64
rpm -e nodeps openssh-8.9p1-1.el7.x86_64
rpm -e nodeps openssh-server-8.9p1-1.el7.x86_64
安装老版本ssh-7.4p1版本
首先将openssh-7.4p1的rpm包先上传到/root/目录下
openssh-7.4p1的rpm包已经上传到我的资源里面,点进主页去下载
#安装openssh-7.4p1
rpm -ivh --nodeps --force openssh-7.4p1-1.el7.x86_64.rpm
rpm -ivh --nodeps --force openssh-clients-7.4p1-1.el7.x86_64.rpm
rpm -ivh --nodeps --force openssh-server-7.4p1-1.el7.x86_64.rpm
重启openssh
systemctl start sshd #启动openssh
systemctl status sshd #查看openssh的状态
查看日志
systemctl status sshd
#或
cd /var/log
cat messages
登录openssh,使用其他机器登录本地openssh或者使用xshell和MobaXterm登录。
方法2:添加openssl的库文件
根据刚刚提示的升级失败日志的提醒是少了libcrypto.so.1.1库文件,我们把已经升级了想要的openssl版本的机器中拷贝出来,放到需要libcrypto.so.1.1库文件的机器的相对应的目录下。
前面升级了openssh-8.9p1版本,这里拷贝openssl-1.1.1q版本的libcrypto.so.1.1、libssl.so.1.1库文件为例。
在已经升级的openssl-1.1.1q的机器中去拷贝libcrypto.so.1.1库文件,为保险起见,把libssl.so.1.1库文件也一起拷贝放到需要libcrypto.so.1.1、libssl.so.1.1库文件的机器的相对应的目录下。
这里把这两个libcrypto.so.1.1、libssl.so.1.1库文件也上传到我的资源,点进去我主页进行下载。
#去到已经升级了openssl-1.1.1q版本的机器中,进入到该目录
cd /usr/lib64/
#拷贝这两个文件libcrypto.so.1.1、libssl.so.1.1到/root/下然后再下载到本地物理机上再传到需要这两个库文件的机器上
cp libcrypto.so.1.1 libssl.so.1.1 /root/
使用xshell登录已经升级了openssh-8.9p1的机器
#进到对应的这两个库文件所在的目录
cd /usr/lib64
输入rz 这里会弹出来物理机上传的路径选中这两个库文件libcrypto.so.1.1、libssl.so.1.1进行上传
#如果显示没有安装rz,使用yum安装一下就可以了
yum install -y lrzsz
另外xshell还需要设置一下rz的设置。
systemctl start sshd
systemctl restart sshd
ls libcrypto.so.1.1 libssl.so.1.1
systemctl status sshd
查看openssh和openssl的版本
ssh -V
openssl --version
登录openssh,使用其他机器登录本地openssh或者使用xshell和MobaXterm登录。
使用SSH远程连接Linux系统的ECS实例时,提示“could not set limit for ‘nofile’: Operation not permitted”错误的原因和解决方案。
问题现象
使用SSH远程连接Linux系统的ECS实例时,提示以下错误信息。
-bash: fork: retry: Resource temporarily unavailable.
pam_limits(sshd:session):could not sent limit for 'nofile':operaton not permitted.
Permission denied.
问题原因
该问题可能是Linux内核中资源限制配置文件/etc/security/limits.conf中nofile值过大,超过内核可打开的文件数,导致无法使用SSH连接ECS实例。
解决方案
您可以根据业务需要,修改/etc/sysctl.conf和/etc/security/limits.conf配置文件以解决此问题。
以VNC方式远程连接ECS实例或者BMC服务器控制管理口链接。
具体操作,请参见连接方式概述。
分别执行如下命令,查看fs.file-max和fs.nr_open参数值。
当fs.file-max和fs.nr_open参数值小于65536,建议您继续步骤3。
若fs.file-max和fs.nr_open参数值大于65536,建议您执行步骤4。
cat /proc/sys/fs/file-max
cat /proc/sys/fs/nr_open
修改/etc/sysctl.conf配置文件。
打开/etc/sysctl.conf配置文件。
vim /etc/sysctl.conf
按i键进入编辑模式。
修改fs.file-max和fs.nr_open参数值。
建议将fs.file-max和fs.nr_open参数值都修改为大于65536。
说明
fs.file-max:系统内核级别所有进程可打开的文件数。
fs.nr_open:系统内核级别单个进程可打开的文件数。
fs.file-max = 655360
fs.nr_open = 655360
修改/etc/security/limits.conf配置文件。
打开/etc/security/limits.conf配置文件。
vim /etc/security/limits.conf
按i键进入编辑模式。
修改* soft nofile和* hard nofile参数值。
例如,将* soft nofile和* hard nofile参数值都修改为大于65535。
* soft nofile 655350
* hard nofile 655350
重启ECS实例。
具体操作,请参见启动实例。
依次执行以下命令,确认fs.file-max和fs.nr_open值修改成功。
cat /proc/sys/fs/file-max
cat /proc/sys/fs/nr_open
总结起来一句话:确认fs.file-max和fs.nr_open值 大于或等于 * soft nofile和* hard nofile参数值。
远程桌面(RDP)连接问题汇总:
- 通过远程桌面连接Windows实例,提示“为安全考虑,已锁定该用户账户,原因是登录尝试或密码更改尝试过多”错误怎么办?
- 通过远程桌面连接Windows Server 2022系统的ECS实例,提示“你的远程桌面服务会话已结束,可能是下列原因之一”错误怎么办?
- 远程登录Windows实例提示“您的凭据不工作”如何处理?
- 通过远程桌面连接Windows实例时出现“出现身份验证错误,要求的函数不受支持”如何解决?
- 通过远程桌面连接Windows实例提示“没有远程桌面授权服务器可以提供许可证”错误怎么办?
- 通过远程桌面连接Windows实例提示“远程桌面用户组没有该权限”错误怎么办?
- 通过远程桌面连接Windows实例提示"连接被拒绝,因为没有授权此用户账户进行远程登录"错误怎么办?
- 通过远程桌面连接Windows实例提示“由于协议错误,会话将被中断,请重新连接到远程计算机”错误怎么办?
- 通过远程桌面连接Windows Server 2008 R2系统的ECS实例时,提示“未指定远程桌面授权服务器”错误怎么办?
- 通过远程桌面连接Windows实例提示“发生身份验证错误,无法连接到本地安全机构”错误怎么办?
- 通过远程桌面连接Windows实例出现报错代码“0x112f”错误怎么办?
- 远程桌面服务认证到期导致远程登录Windows实例失败怎么办?
- Windows Server 2012系统的ECS实例无法允许单个用户连接多个远程桌面会话怎么办?
- 在Windows系统的ECS实例上安装软件后,通过命令行工具执行命令时提示“command not found”错误怎么办?
- Windows Server 2008与2012系统的ECS实例无法启用远程协助中的“允许远程协助连接这台计算机”选项怎么办?
- 通过远程桌面连接Windows实例提示“要远程登录,你需要具有通过远程桌面服务进行登录的权限。”信息如何解决?
- 通过远程桌面连接Windows实例无法长时间保持连接如何解决?
- 通过远程桌面连接Winodws系统的ECS实例时,无法进行文本复制粘贴如何解决?
- 通过远程桌面连接Windows系统的ECS实例时,提示“远程桌面连接已断开”错误怎么办?
- 使用相同的账号和密码,通过VNC登录Windows实例成功,通过远程桌面连接Windows实例却失败怎么办?
- 通过远程桌面连接Windows系统的ECS实例提示“发生身份验证错误。要求的安全包不存在”错误怎么办?
- Windows实例的RPC组件异常如何解决?
- 通过远程桌面连接Windows系统的ECS实例提示“你的远程桌面许可证出现问题,您的会话将在60分钟后断开连接。”错误怎么办?
- 通过远程桌面连接Windows实例提示“远程连接计算机需要网络级别身份验证”怎么办?
- 通过Mac系统的远程桌面连接Windows实例,提示“远程桌面连接无法验证您希望连接的计算机的身份”错误怎么办?
- 通过远程桌面连接Windows系统的ECS实例时,提示“终端服务器超出了最大允许连接数”错误怎么办?
- 通过远程桌面连接Windows实例失败但没有错误提示怎么办?
- 通过远程桌面连接Windows实例提示“系统找不到指定的文件”错误怎么办?
- 为什么使用默认的端口(3389)无法登录Windows实例?
- 通过远程桌面连接Windows实例,输入密码后连接自动断开,查看系统日志显示存在登录和注销记录怎么办?
- 通过远程桌面连接Windows实例,提示“由于从远程计算机接收到非预期的服务器身份验证证书,连接已经被终止”错误怎么办?
- 通过远程桌面连接Windows实例,提示“远程桌面由于以下原因之一无法连接到远程计算机:未启用对服务器的远程访问、远程计算机已关闭、远程计算机在网络上不可用”错误怎么办?