一,环境描述
服务器机器A:
Red Hat Enterprise Linux Server release 6.3 (Santiago)
Linux crmapp-t 2.6.32-279.el6.x86_64 #1 SMP
gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC)
客户机器B:
CentOS release 6.5 (Final)
Linux hk5-tmp-ocs1 2.6.32-431.el6.x86_64 #1 SMP
gcc version 4.7.4 (GCC)
二,问题现象描述
1,计划从 客户B ssh免密登陆 服务器A;
2,做好配置文件并重启服务器A的ssh服务之后,依然提示需要输入密码,无法实现免密登陆,
通过下一节排查中的方法1,2,3,4都没有解决问题,直到方法5解决了问题;
检查配置文件
/etc/ssh/sshd_config
PubkeyAuthentication yes
RSAAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
StrictModes yes
客户B 跟 服务器A 的配置相同;
用相同的操作步骤,可以实现从 服务器A 到 客户B 的ssh免密登陆,
从而确定问题出在服务器A上;
2,免密登陆失败,最常见的原因在于StrictModes yes并且相关文件对非授权用户给的权限过高,
排查后发现符合要求,没有问题:
目录/inter 权限700
目录/inter/.ssh 权限700
文件/inter/.ssh/authorized_keys 权限600
tail -n 20 /var/log/secure 也没有发现关于权限的报错,
如果权限有问题,会出现 bad ownership or modes for directory 的日志
3,从客户B 可以 ssh输入密码登陆 服务器A,所以不是服务器A防火墙的问题;
4,日志调试
在服务器A上执行命令 ssh -vvv inter@192.168.10.103
摘取部分日志如下
debug1: Next authentication method: publickey
debug1: Trying private key: /inter/.ssh/identity
debug3: no such identity: /inter/.ssh/identity
debug1: Trying private key: /inter/.ssh/id_rsa
debug3: no such identity: /inter/.ssh/id_rsa
debug1: Offering public key: /inter/.ssh/id_dsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug3: Wrote 528 bytes for a total of 1637
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
inter@192.168.10.103's password:
发现debug2: we sent a publickey packet, wait for reply之后,没有服务器的响应,
初步估计是服务器A读取不到authorized_keys文件,最终跳到方法5,解决问题
5, cd /inter/.ssh
ls -laZ
--->
-rw-------. inter inter unconfined_u:object_r:default_t:s0 authorized_keys
cat /etc/selinux/config
--->
SELINUX=enforcing
估计着似乎找到问题了
SElinux 的类型标签:
default_t:文件或目录的selinux属性与file-context配置文件定义的模式不匹配
file_t:文件没有selinux属性
这两种的类型的文件或目录,受限制的域的程序均不能访问
尝试修复:
chcon -R -t ssh_home_t /inter/.ssh
免密登陆成功
四,总结
4.1 /etc/selinux/config 中 SELINUX=enforcing 则表示SElinux安全子模块开启,
如果文件的SElinux 的类型标签是default_t,则应用进程没有权限读取该文件;
修改文件的SElinux 类型标签为相应进程的类型域即可,本例即修改为ssh_home_t;
4.2 如果新建用户不是挂载在/home目录下而是直接挂载在根目录下,
服务器机器A:
Red Hat Enterprise Linux Server release 6.3 (Santiago)
Linux crmapp-t 2.6.32-279.el6.x86_64 #1 SMP
gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC)
客户机器B:
CentOS release 6.5 (Final)
Linux hk5-tmp-ocs1 2.6.32-431.el6.x86_64 #1 SMP
gcc version 4.7.4 (GCC)
二,问题现象描述
1,计划从 客户B ssh免密登陆 服务器A;
2,做好配置文件并重启服务器A的ssh服务之后,依然提示需要输入密码,无法实现免密登陆,
通过下一节排查中的方法1,2,3,4都没有解决问题,直到方法5解决了问题;
三,排查
1,测试问题是否出在服务器上,检查配置文件
/etc/ssh/sshd_config
PubkeyAuthentication yes
RSAAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
StrictModes yes
客户B 跟 服务器A 的配置相同;
用相同的操作步骤,可以实现从 服务器A 到 客户B 的ssh免密登陆,
从而确定问题出在服务器A上;
2,免密登陆失败,最常见的原因在于StrictModes yes并且相关文件对非授权用户给的权限过高,
排查后发现符合要求,没有问题:
目录/inter 权限700
目录/inter/.ssh 权限700
文件/inter/.ssh/authorized_keys 权限600
tail -n 20 /var/log/secure 也没有发现关于权限的报错,
如果权限有问题,会出现 bad ownership or modes for directory 的日志
3,从客户B 可以 ssh输入密码登陆 服务器A,所以不是服务器A防火墙的问题;
4,日志调试
在服务器A上执行命令 ssh -vvv inter@192.168.10.103
摘取部分日志如下
debug1: Next authentication method: publickey
debug1: Trying private key: /inter/.ssh/identity
debug3: no such identity: /inter/.ssh/identity
debug1: Trying private key: /inter/.ssh/id_rsa
debug3: no such identity: /inter/.ssh/id_rsa
debug1: Offering public key: /inter/.ssh/id_dsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug3: Wrote 528 bytes for a total of 1637
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
inter@192.168.10.103's password:
发现debug2: we sent a publickey packet, wait for reply之后,没有服务器的响应,
初步估计是服务器A读取不到authorized_keys文件,最终跳到方法5,解决问题
5, cd /inter/.ssh
ls -laZ
--->
-rw-------. inter inter unconfined_u:object_r:default_t:s0 authorized_keys
cat /etc/selinux/config
--->
SELINUX=enforcing
估计着似乎找到问题了
SElinux 的类型标签:
default_t:文件或目录的selinux属性与file-context配置文件定义的模式不匹配
file_t:文件没有selinux属性
这两种的类型的文件或目录,受限制的域的程序均不能访问
尝试修复:
chcon -R -t ssh_home_t /inter/.ssh
免密登陆成功
四,总结
4.1 /etc/selinux/config 中 SELINUX=enforcing 则表示SElinux安全子模块开启,
如果文件的SElinux 的类型标签是default_t,则应用进程没有权限读取该文件;
修改文件的SElinux 类型标签为相应进程的类型域即可,本例即修改为ssh_home_t;
4.2 如果新建用户不是挂载在/home目录下而是直接挂载在根目录下,
会出现该用户$HOME/.ssh的SElinux的类型标签是default_t,产生这种情况的机制还没弄清楚。
如有错误,恳请指正。