KingbaseES集群部署系列之---sshd启用UsePAM部署失败案例
案例说明:
kylin v10 Server脚本部署KingbaseES V8R6集群,集群节点创建ssh互信后,在通过ssh连接检查节点文件系统空间时,语句执行失败,部署被终止。
适用版本:
KingbaseES V8R6
操作系统:
[root@1-0003 ~]# cat /etc/os-release
NAME="Kylin Linux Advanced Server"
VERSION="V10 (Lance)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Lance)"
ANSI_COLOR="0;31"
一、问题现象
如下所示,执行集群脚本部署,在检测主机文件系统空间时,语句执行失败,部署被终止:
二、问题分析
1、检测节点之间ssh互信
如下所示,检测节点ssh互信正常:
[kingbase@1-0003 ~]$ ssh root@10.100.33.21
Authorized users only. All activities may be monitored and reported.
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Thu Jun 19 10:58:33 2024 from 172.25.144.27
[root@1-003 ~]#
2、执行脚本报错语句
如下所示,正常执行此语句,输出被检测文件系统的大小,但此语句执行后无输出结果:
[kingbase@1-0003 install]$ ssh -q -o ConnectTimeout=10 -o StrictHostKeyChecking=no
-l root -T 10.100.33.21 'df /home/kingbase -P 2>/dev/null |head -n 2|tail -n +2
|awk '\''{print $4}'\'''
[kingbase@1-0003 install]$
# 查看语句执行结果:
[kingbase@1-0003 install]$ echo $?
1
---语句执行失败。
正常输出的结果:
[root@kysrv pam.d]# ssh -q -o ConnectTimeout=10 -o StrictHostKeyChecking=no
-l root -T 127.0.0.1 'df /home/kingbase -P 2>/dev/null |head -n 2|tail -n +2
|awk '\''{print $4}'\'''
48822244
[root@kysrv pam.d]# echo $?
0
3、检查系统ssh配置
如下所示,在ssh的配置中,UsePAM为yes:
[root@1-0003 pam.d]# cat /etc/ssh/sshd_config|grep -i usepam
# WARNING: 'UsePAM no' is not supported in kylin and may cause several
UsePAM yes
# 执行测试语句
[root@1-0003 ~]# ssh -q -o ConnectTimeout=10 -o StrictHostKeyChecking=no
-l root -T 10.100.33.21 'ls -l'
---无输出结果,执行不成功。
将UsePAM配置为no,重启sshd服务:
如下所示,执行以下测试语句成功:
[root@1-0003 ~]# ssh -q -o ConnectTimeout=10 -o StrictHostKeyChecking=no
-l root -T 10.100.33.21 'ls -l'
总用量 32
.......
-rw------- 1 root root 2748 12月 26 17:44 anaconda-ks.cfg
-rw-r--r-- 1 root root 3154 12月 26 17:52 initial-setup-ks.cfg
-rwxr-xr-x 1 root root 16640 1月 11 14:26 test
-rw-r--r-- 1 root root 113 1月 11 14:25 test.c
4、查看部署脚本
如下所示,脚本在执行过程中,会检查系统sshd_config配置文件,并修改UsePAM为yes:
......
execute_command ${super_user} $ip "test -f /etc/ssh/sshd_config"
if [ $? -eq 0 ];then
echo "$(date +"%Y-%m-%d %T") [INFO] change UsePAM on $ip ..."
execute_command ${super_user} $ip "sed -i \"s/^UsePAM[ ]*/#UsePAM/g\" /etc/ssh/sshd_config"
execute_command ${super_user} $ip "echo \"\" >> /etc/ssh/sshd_config"
execute_command ${super_user} $ip "echo \"UsePAM yes\" >> /etc/ssh/sshd_config"
echo "$(date +"%Y-%m-%d %T") [INFO] change UsePAM on $ip ... Done"
execute_command ${super_user} $ip "systemctl restart sshd 1>/dev/null 2>&1"
execute_command ${super_user} $ip "service sshd restart 1>/dev/null 2>&1"
......
三、问题解决
方案1、配置sshd_config文件中,UsePAM为no,重启sshd服务后,注释部署脚本中对UsePAM检查和修改语句,再执行部署。
方案2、无需修改部署脚本,只需在操作系统创建: /etc/pam.d/sshd文件,内容如下:
[root@1-0003 pam.d]# cat /etc/pam.d/sshd
#%PAM-1.0
auth substack password-auth
auth include postlogin
account required pam_sepermit.so
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session optional pam_motd.so
session include password-auth
session include postlogin
如果此文件已经存在,注意取消以下三行的注释:
四、总结
对于UsePAM=yes的配置,会影响到sshd及securecmdd服务的连接,相关具体资料可以查看网上关于PAM认证的介绍。
PAM(插入式验证模块(Pluggable Authentication Module,PAM))
简单来说,就是提供了一组身份验证、密码验证的统一抽象接口,应用程序员可以使用这些API接口来实现与安全性相关的功能。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2023-06-20 KingbaseES V8R6集群运维案例之---sys_backup.sh init ‘xxxx invalid’故障
2022-06-20 KingbbaseES V8R6集群维护案例之---集群之间数据迁移
2022-06-20 KingbaseES V8R6集群维护案例之--单实例数据迁移到集群案例