SELinux拦截sshd导致ssh连接失败的问题: {execmem}没有权限

本文介绍了一种因SELinux权限不足导致SSH连接失败的情况及其解决方法。通过对系统日志的分析,确定了问题是由{execmem}

问题描述:

近日服务器ssh无法通过远程连接上去,连接时服务器的SELiunx发起警报sshd被拦截
在这里插入图片描述

问题排查:

1.重启sshd服务

systemctl restart sshd

2.查看sshd的运行状态

systemctl status sshd

在这里插入图片描述
sshd.service failed
发现sshd进程启动失败,但从这里看不出失败的原因

3.查看linux系统日志

cat /var/log/messages

翻到最末尾端,发现一条有用的信息:
在这里插入图片描述

/usr/sbin/sshd: error while loading shared libraries: cannot create cache for search path: Cannot allocate memory

Unit sshd.service entered failed state.

sshd.service failed.

SELinux is preventing /usr/sbin/sshd from using the execmem access on a process. For complete SELinux messages. run sealert -l 8d238acb-0553-4daf-98f1-ba2a20c90eec

根据上面那条SELinux拦截的信息看出
SELinux正在阻止/usr/sbin/sshd对进程使用execmem访问
可以根据他提示的执行命令查看完整的拦截消息:
“sealert -l 8d238acb-0553-4daf-98f1-ba2a20c90eec”

也可以用下面的办法:
在网上搜索了一下
auditd 会把 SELinux 的信息都记录在 /var/log/auditd/auditd.log 中。
用命令输出一下auditd.log里包含denied的信息

cat /var/log/audit/audit.log | grep denied

查看到一条信息如下:

type=AVC msg=audit(1601087029.552:15377): avc:  denied  { execmem } for  pid=30125 comm="sshd" scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tclass=process

在网上搜到相似的问题,这个问题是因为{ execmem }权限不够,导致sshd被SELinux拦截

具体的权限查看:

ls -alZ

解决办法:

修复一下ssh目录的权限

使用restorecon来恢复ssh主目录中所有文件的SELinux配置信息

restorecon -r -v /root/.ssh

在这里插入图片描述
修复完成后,使用xshell测试连接成功。

<think>嗯,用户问的是SSH连接虚拟机失败怎么解决。这个问题挺常见的,可能有多种原因。我得先回想一下常见的故障点,然后一步步梳理出来。 首先,用户可能对网络配置不太熟悉,特别是虚拟机的网络设置。比如,虚拟机是否配置了正确的网络模式,NAT还是桥接?如果是NAT,端口转发是否正确?还有,虚拟机的防火墙有没有开放22端口?这些都是需要检查的地方。 然后是SSH服务本身的问题。用户可能没有安装openssh-server,或者服务没启动。得提醒他们检查服务状态,用systemctl命令看看是否active。另外,配置文件可能有误,比如PermitRootLogin被禁用,或者监听的地址不对。 还有可能是IP地址的问题。虚拟机的IP是否变化了?用户是不是用对了IP地址?用ip a或者ifconfig查看一下。另外,本地主机能否ping通虚拟机的IP?如果不行,说明网络不通,得检查网络连接。 端口方面,虽然默认是22,但有时候会被修改。用户可能改了SSH端口但没在连接时指定,或者防火墙挡住了。可以用telnet或者nc检查端口是否可达。 用户权限方面,比如使用密码登录时,是否允许密码认证?或者是否配置了密钥登录但没放公钥?这些都需要检查配置文件里的选项,比如PasswordAuthentication和PubkeyAuthentication。 还有,如果之前连接过,known_hosts文件可能有旧的密钥,导致冲突。这时候需要删除对应的条目,或者整个文件,当然这会带来安全提示重新接受的问题。 另外,SELinux或者AppArmor这样的安全模块也可能阻止SSH连接,可以尝试临时禁用看看是否解决问题。 总结下来,应该分步骤来排查,从网络连通性开始,再到服务状态、配置、防火墙,最后是其他安全设置。这样用户一步步检查下来,应该能找到问题所在。得确保用简单的中文说明每个步骤,并给出具体的命令示例,方便用户操作。同时,提醒用户注意权限问题,比如用sudo执行需要权限的命令。</think>SSH连接虚拟机失败的常见原因及解决方法如下,按排查顺序逐步进行: ——————————————— ### 一、检查网络连通性 1. **验证IP地址正确性** - 虚拟机执行:`ip a` 或 `ifconfig`(查看网卡IP) - 确认客户端连接的IP是否与虚拟机显示的一致 2. **测试基础连通性** - 客户端执行:`ping 虚拟机IP` - 若不通: * 检查虚拟机网络模式(NAT/桥接) * 确认宿主机防火墙未拦截(Windows Defender/第三方防火墙) * 验证虚拟网络编辑器配置(VMware/VirtualBox) ——————————————— ### 二、检查SSH服务状态 1. **确认服务已启动** ```bash # Ubuntu/Debian sudo systemctl status ssh # CentOS/RHEL sudo systemctl status sshd ``` - 若未运行:`sudo systemctl start ssh` 2. **验证服务监听端口** ```bash sudo netstat -tuln | grep :22 ``` - 若无输出:检查`/etc/ssh/sshd_config`中`Port`配置 ——————————————— ### 三、排查防火墙规则 1. **虚拟机防火墙** ```bash # Ubuntu UFW sudo ufw allow 22 # CentOS firewalld sudo firewall-cmd --add-port=22/tcp --permanent sudo firewall-cmd --reload ``` 2. **云平台安全组**(适用于AWS/Azure/阿里云等) - 检查云控制台是否开放22端口入站规则 ——————————————— ### 四、检查SSH配置 1. **关键配置项验证** 修改`/etc/ssh/sshd_config`后需重启服务: ```bash PermitRootLogin yes/prohibit-password # 是否允许root登录 PasswordAuthentication yes # 是否启用密码认证 AllowUsers your_username # 用户白名单 ``` 2. **客户端连接命令** ```bash ssh -v username@ip # -v参数显示详细日志 ssh -p 2222 username@ip # 指定非默认端口时 ``` ——————————————— ### 五、特殊场景处理 1. **NAT模式端口转发** - VMware:`虚拟机设置 > 网络适配器 > NAT设置 > 端口转发` - VirtualBox:`设置 > 网络 > 高级 > 端口转发` 2. **密钥认证失败** ```bash chmod 600 ~/.ssh/authorized_keys # 密钥文件权限必须为600 chmod 700 ~/.ssh # .ssh目录权限必须为700 ``` 3. **known_hosts冲突** ```bash ssh-keygen -R 目标IP # 清除旧指纹记录 ``` ——————————————— ### 六、日志分析 1. **服务端日志** ```bash sudo tail -f /var/log/auth.log # Ubuntu/Debian sudo tail -f /var/log/secure # CentOS/RHEL ``` 2. **常见错误代码** - `Connection refused`: 服务未运行/防火墙拦截 - `No route to host`: 网络不通 - `Permission denied`: 认证失败 > 通过以上步骤逐步排查,可解决90%以上的SSH连接问题。建议每次测试只修改一个变量,方便定位问题根源。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值