KingbaseES集群典型案例之---securecmdd互信故障案例集锦
背景:
sys_securecmdd是KingbaseES集群中自带的工具,集群监控、管理时通过sys_securecmdd安全执行命令。在一些禁止使用ssh的通用机或者是专用机环境中,可以通过sys_securecmdd工具实现节点之间远程连接后执行相应的命令。如果securecmdd在集群节点之间建立互信失败,将影响集群的部署、启动、切换等操作,本文档描述了相关的故障案例及解决方案与大家分享。
适用版本:
KingbaseES V8R6/V9R1
案例一、securecmdd连接需要用户密码
1、问题现象
在KingbaseES数据库部署sys_securecmdd后,默认客户端和服务端之间的连接是互信免密;但经常在一些生产环境会出现客户端和服务端之间的连接需要密码,导致服务无法正常运行。例如以下案例,在启动集群时,需要输入密码:
[kingbase@node201 bin]$ ./sys_monitor.sh restart
2024-02-29 10:16:03 Ready to stop all DB ...
kingbase@192.168.1.202's password:
kingbase@192.168.1.202's password:
kingbase@192.168.1.202's password:
......
2、问题分析
在执行sys_monitor.sh启动集群时,将通过sys_securecmdd启动、停止节点的数据库、集群等服务。执行sys_securecmdd的客户端和服务端连接测试,找出问题的原因。
如下所示,集群sys_securecmdd连接配置:
[kingbase@node201 bin]$ cat ../etc/repmgr.conf |grep scmd
scmd_options='-q -o ConnectTimeout=10 -o StrictHostKeyChecking=no -p 8890 -o ServerAliveInterval=2 -o ServerAliveCountMax=3'
use_scmd='on'
免密连接失败分析:
1)sys_securecmdd启动到debug模式
如下所示,将远程节点作为服务端sys_securecmdd启动到debug模式,等待客户端的连接:
[root@node202 .es]# /home/kingbase/cluster/securecmdd/bin/sys_securecmdd -D -ddd
debug2: load_server_config: filename /etc/.kes/securecmdd_config
debug2: load_server_config: done config len = 580
......
# 注意:启动debug模式,需要以绝对路径的方式启动sys_securecmdd服务。
2)客户端连接
如下所示,本节点执行客户端连接时,需要密码认证:
[kingbase@node201 bin]$ ./sys_securecmd kingbase@node202
kingbase@node202's password:
3)查看服务端debug信息
debug信息1:如下所示,debug信息出现“bad ownership or modes for directory /home/kingbase”提示:
debug1: temporarily_use_uid: 200/1001 (e=0/0)
debug1: trying public key file /home/kingbase/.es/accept_hosts
debug1: fd 5 clearing O_NONBLOCK
Authentication refused: bad ownership or modes for directory /home/kingbase
debug3: send packet: type 51 [preauth]
.....
debug信息2:如下所示,debug信息出现“Could not open authorized keys '/home/kingbase/.es/accept_hosts': Permission denied”提示:
debug1: temporarily_use_uid: 200/1001 (e=0/0)
debug1: trying public key file /home/kingbase/.es/accept_hosts
debug1: Could not open authorized keys '/home/kingbase/.es/accept_hosts': Permission denied
debug1: restore_uid: 0/0
debug3: mm_answer_keyallowed: publickey authentication: RSA key is not allowed
Failed publickey for kingbase from 192.168.1.201 port 60119 ssh2: RSA SHA256:M0b/7bx/AZyPul5TDdmKAGxnuBq5hOKqkTi8ihpWbII
......
4)免密连接失败密钥文件属性
如下所示,以下为客户端连接服务端时,无法建立免密连接时密钥文件的目录和文件的属性·
(注意:任意一种情况出现都无法建立互信连接):
# kingbase用户宿主目录权限过大(默认0700)
[root@node202 .es]# ls -lhd /home/kingbase/
drwxrwxrwx. 14 kingbase kingbase 4.0K Feb 7 11:01 /home/kingbase/
# kingbase用户宿主目录owner为root
[root@node202 .es]# ls -lhd /home/kingbase
drwx------. 14 root root 4.0K Feb 7 11:01 /home/kingbase
# /home/kingbase/.es的owner为root
[root@node202 .es]# ls -lhd /home/kingbase/.es
drwx------. 2 root root 40 Aug 25 2023 /home/kingbase/.es
# 密钥文件的owner为root
[root@node202 .es]# ls -lh /home/kingbase/.es
total 8.0K
-rw-------. 1 root root 381 Oct 11 18:03 accept_hosts
-rw-------. 1 root root 1.7K Oct 11 18:03 key_file
3、问题解决
修改root或kingbase用户宿主目录到正确的属性,如下所示,sys_securecmdd密钥文件及目录的正确属性(以kingbase用户为例,root用户类似):
(关于sys_securecmdd连接认证的详细内容,请参考前面的文档《KingbaseES 高可用组件sys_securecmdd之一---sys_securecmdd部署及应用》)。
# kingbase用户宿主目录属性
[kingbase@node201 bin]$ ls -lhd /home/kingbase/
drwx------. 30 kingbase kingbase 4.0K Feb 29 11:20 /home/kingbase/
# 密钥文件目录属性
[kingbase@node201 bin]$ ls -lhd /home/kingbase/.es
drwx------. 2 kingbase kingbase 40 Aug 25 2023 /home/kingbase/.es
# 密钥文件属性
[kingbase@node202 .es]$ ls -lh
total 8.0K
-rw-------. 1 kingbase kingbase 381 Oct 11 18:03 accept_hosts
-rw-------. 1 kingbase kingbase 1.7K Oct 11 18:03 key_file
# root宿主目录
[root@node201 .kes]# ls -lhd /root
dr-xr-x---. 7 root root 4.0K Jul 19 09:55 /root
案例二:缺失.es目录securecmdd连接需要密码
系统环境:
[kingbase@node208 bin]$ cat /etc/os-release
NAME="openEuler"
VERSION="20.03 (LTS-SP4)"
ID="openEuler"
VERSION_ID="20.03"
PRETTY_NAME="openEuler 20.03 (LTS-SP4)"
ANSI_COLOR="0;31"
1、问题现象
在OpenEuler系统下,执行securecmdd部署后,其中一个节点缺失/home/.es目录及文件,导致securecmd连接时需要密码。
2、问题分析
如下所示,启动securecmdd到debug模式,日志提示“缺失/home/kingbase/.es/accept_hosts”文件:
检查/home下,缺失.es目录及文件。
3、问题解决
创建.es目录,从其他节点拷贝文件到目录:
[kingbase@node209 bin]$ ls -lh ~/.es/
total 8.0K
-rw------- 1 kingbase kingbase 381 Nov 12 17:13 accept_hosts
-rw------- 1 kingbase kingbase 1.7K Nov 12 17:13 key_file
---securecmd客户端再次连接,互信正常。
案例三: UsePAM=yes,securecmdd无法建立连接
1、问题现象
在集群部署、启动及切换时,集群节点之间securecmdd连接失败。如下所示,通过securecmdd客户端来连接服务端测试,连接被关闭:
[kingbase@node201 bin]$ ./sys_securecmd root@node202
Last login: Fri Jul 19 09:55:26 2024 from 192.168.1.1
Connection to node202 closed.
[kingbase@node201 bin]$ ./sys_securecmd kingbase@node202
Last login: Thu Jul 18 10:04:13 2024
Connection to node202 closed.
2、问题分析
1)远程节点securecmdd服务以debug方式启动
# 注意:必须以绝对路径方式启动securecmdd服务
[root@node202 pam.d]# /home/kingbase/cluster/securecmdd/bin/sys_securecmdd -D -ddd
debug2: load_server_config: filename /etc/.kes/securecmdd_config
debug2: load_server_config: done config len = 580
debug2: parse_server_config_depth: config /etc/.kes/securecmdd_config len 580
......
2)当前节点作为客户端连接securecmdd服务
[kingbase@node201 bin]$ ./sys_securecmd kingbase@node202
Last login: Fri Jul 19 14:51:42 2024 from 192.168.1.201
debug3: PAM session not opened, exiting
Connection to node202 closed.
如下所示:提示"PAM session..."
3)查看服务端debug日志
如下所示,debug日志中提示PAM认证失败:
......
debug1: PAM: establishing credentials
debug1: PAM: pam_setcred(): Failure setting user credentials
debug3: PAM: opening session
debug2: do_pam_session: auth information in SSH_AUTH_INFO_0
debug1: auth_restrict_session: restricting session
debug1: auth_activate_options: setting new authentication options
PAM: pam_open_session(): Cannot make/remove an entry for the specified session
User child is on pid 5129
debug1: PAM: establishing credentials
debug1: PAM: pam_setcred(): Failure setting user credentials
......
debug3: PAM: sshpam_thread_cleanup entering
debug3: mm_request_receive: entering
debug1: do_cleanup
debug1: PAM: cleanup
debug3: PAM: sshpam_thread_cleanup entering
.......
3、问题解决
对于启用PAM认证后连接故障问题,可以通过两种方案解决;
1)配置UsePAM=no(默认yes),不启用PAM认证(all nodes)。
[kingbase@node201 bin]$ cat /etc/.kes/securecmdd_config |grep -i pam
UsePAM no
2)启用PAM认证,配置UsePAM=yes(all nodes)。
[kingbase@node201 bin]$ cat /etc/.kes/securecmdd_config |grep -i pam
UsePAM yes
但需要配置/etc/pam.d/sys_securecmdd文件,如下所示:
[root@node201 .kes]# cat /etc/pam.d/sys_securecmdd
#%PAM-1.0
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
# Used with polkit to reauthorize users in remote sessions
-auth optional pam_reauthorize.so prepare
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 include password-auth
session include postlogin
# Used with polkit to reauthorize users in remote sessions
-session optional pam_reauthorize.so prepare
3)重新启动securecmdd服务后,连接正常。
总结:
对于集群环境中securecmdd应用,需要注意以下几点:
- 做好securecmdd的部署。
- 配置正确的kingbase和root用户宿主目录及认证文件的属性。
- 注意UsePAM参数的配置,默认为yes。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」