KingbaseES 高可用组件sys_securecmdd之一---sys_securecmdd部署及应用

背景:
sys_securecmdd是KingbaseES集群中自带的工具,集群监控、管理集群时通过sys_securecmdd安全执行命令。在一些禁止使用ssh的通用机或者是专用机环境中,可以通过sys_securecmdd工具实现节点之间远程连接后执行相应的命令。
集群组件

一、sys_securecmdd介绍
在KingbaseES集群的启动、关闭及切换时,需要在节点间远程执行命令,通常可以通过ssh来实现,但是在一些生产环境中,为了系统安全,禁止主机之间建立ssh互信,集群节点之间无法执行远程命令,导致集群管理异常。
在禁用ssh互信的生产环境,可以通过sys_securecmdd工具实现节点之间的互信,并通过sys_securecmdd实现远程执行命令。
sys_securecmdd组成:

服务端:

 sys_securecmdd 默认监听8890端口,接受客户端连接。
 sys_secureftp 服务端调用,用于接收文件(用于集群部署)。
 sys_HAscmdd.sh 脚本,管理服务端。

客户端:
sys_securecmd 客户端,用于连接服务端。

密钥文件:

 accept_hosts 免密文件
 key_file 私钥文件

其他文件:

 securecmdd_config 服务端配置文件
 securecmd_config 客户端配置文件
 sys_HAscmdd.conf 脚本配置文件
 securecmdd.service 服务模板文件,服务端可以使用此文件 注册为服务。
 依赖库文件 libcrypto.so.10 依赖openssl编译,为了不同环境能够 使用,需要带上编译使用的库文件。

其中,sys_HAscmdd.conf是用于配置sys_securecmdd的文件,其中参数说明如下:

start_method:
启动sys_securecmdd进程并保证进程 高可用的方式。systemd,通用机集群默认值,通过service服务启动 sys_securecmdd;
crontab,专用机集群默认值,通过crond服务定时启动sys_securecmdd。 默认为crontab。

scmd_port:
进程sys_securecmdd的监听端口,修 改后,需要使用sys_HAscmdd.sh脚 本初始化。服务端口默认8890

二、sys_securecmdd部署
在集群节点上部署sys_securecmdd工具(all nodes)

1、查看数据库软件安装包(自带sys_securecmdd工具)

[kingbase@node1 zip]$ pwd
/opt/Kingbase/ES/V8R6_054/ClientTools/guitools/DeployTools/zip

[kingbase@node1 zip]$ ls -lh
total 341M
-rw-rw-r--. 1 kingbase kingbase 338M Apr  7 16:18 db.zip
-rw-rw-r--. 1 kingbase kingbase 9.7K Apr  7 16:18 install.conf
-rw-rw-r--. 1 kingbase kingbase 2.1M Apr  7 16:18 securecmdd.zip
-rwxrwxr-x. 1 kingbase kingbase 4.0K Apr  7 16:18 trust_cluster.sh
-rwxrwxr-x. 1 kingbase kingbase 138K Apr  7 16:18 V8R6_cluster_install.sh

2、将securecmdd.zip拷贝到/home/kingbase/cluster下(集群安装目录)

[kingbase@node1 zip]$ cp securecmdd.zip /home/kingbase/cluster/
[kingbase@node1 cluster]$ unzip securecmdd.zip 

查看可执行文件:
[root@node2 bin]# ls -lh
total 2.0M
-rwxr-xr-x 1 kingbase kingbase  34K Apr  7 16:18 sys_HAscmdd.sh
-rwxr-xr-x 1 kingbase kingbase 856K Apr  7 16:18 sys_securecmd
-rwxr-xr-x 1 kingbase kingbase 938K Apr  7 16:18 sys_securecmdd
-rwxr-xr-x 1 kingbase kingbase 149K Apr  7 16:18 sys_secureftp

查看配置文件信息:
[root@node2 share]# ls -lh
total 24K
-rw------- 1 kingbase kingbase  381 May 23 10:26 accept_hosts
-rw------- 1 kingbase kingbase 1.7K May 23 10:26 key_file
-rw------- 1 kingbase kingbase  315 May 23 10:26 securecmd_config
-rw------- 1 kingbase kingbase  586 May 23 10:26 securecmdd_config
-rw-r--r-- 1 kingbase kingbase  275 May 23 10:26 securecmdd.service
-rw-r--r-- 1 kingbase kingbase  246 May 23 10:26 sys_HAscmdd.conf

3、执行sys_HAscmdd.sh init部署

[root@node2 bin]# sh sys_HAscmdd.sh init
successfully initialized the sys_securecmdd, please use "sys_HAscmdd.sh start" to start the sys_securecmdd

Tips:在执行sys_HAscmdd.sh init后,完成sys_securecmdd的部署,将会创建和配置、认证、服务等相关的目录和文件。

4、启动sys_securecmdd服务
如下所示,在通用机环境sys_securecmdd通过systemd管理:

[root@node2 bin]# sh sys_HAscmdd.sh start
[root@node2 bin]# ps -ef |grep secure
root     30443     1  0 15:23 ?        00:00:00 sys_securecmdd: /home/kingbase/cluster/securecmdd/bin/sys_securecmdd -f /etc/.kes/securecmdd_config [listener] 0 of 128-256 startups

查看服务状态:
[root@node2 bin]# netstat -antlp |grep 8890
tcp        0      0 0.0.0.0:8890            0.0.0.0:*               LISTEN      30443/sys_securecmd 
tcp6       0      0 :::8890                 :::*                    LISTEN      30443/sys_securecmd 

通过systemctl启动和查看服务:
[root@node202 ~]# systemctl start securecmdd
[root@node202 ~]# systemctl status securecmdd

三、sys_securecmdd互信配置
sys_securecmdd作为KingbaseES集群组件,部署在集群节点上,用于节点之间远程安全执行命令;在集群管理中,客户端(sys_securecmd)和服务端(sys_securecmdd)之间连接必须是互信免密,类似ssh之间的互信连接。
对于sys_securecmdd无须手工建立互信,在部署时,自动建立了客户端和服务端之间的互信。并且sys_securecmdd的互信与ssh的配置没有关系,ssh的配置不影响sys_securecmdd的互信建立。

1、认证文件(sys_HAscmdd.sh init后自动创建配置和认证文件)
如下所示,密钥文件存储在用户 ~/.es下,注意文件正确的属主和权限以及宿主目录的权限,否则影响sys_securecmdd的互信连接:

#通用机环境下,root和kingbase用户都有认证文件
[root@node201 .es]# ls -lhd /root
dr-xr-x---. 7 root root 4.0K Jan 25 15:45 /root
[root@node201 ~]# ls -lh /root/.es
total 8.0K
-rw-------. 1 root root  381 Aug 25 16:49 accept_hosts
-rw-------. 1 root root 1.7K Aug 25 16:49 key_file

[kingbase@node201 ~]$ ls -lhd /home/kingbase/
drwx------. 30 kingbase kingbase 4.0K Jan 19 00:52 /home/kingbase/
[kingbase@node201 ~]$ ls -lh /home/kingbase/.es
total 8.0K
-rw-------. 1 kingbase kingbase  381 Oct 11 18:00 accept_hosts
-rw-------. 1 kingbase kingbase 1.7K Oct 11 18:00 key_file

2、与ssh密钥文件对比
如下所示,sys_securecmdd和ssh建立互信的原理是一致,都是通过非对称加密(公钥和私钥)来建立节点之间的安全连接。

1)sys_securecmdd密钥文件

#公钥文件
[root@node201 .es]# cat accept_hosts
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4llyAtjAkPvr2VRij+uPfiMPqcfzZ3hjDjyVwCPXUKj2Kapn76cDcjuS8kzMxohlje0frC9SCGS6hRLFPEO0+Im32szmNE/iAQPYqfUzLf7JjydXY/VjGJYyawoMU2yGZuPFTiZ3UiuqO0lQv1a2jTIwR/IVqcG12YjQ/jaHAJclUmRCbKDii2Pda8ezhqmkpSWIM9NX0k69KhVKJMX1x2q1MYnZRaHx53F3d9XBUXFUL3tbwWrYS7CyWslw7GRJqeAKOSTbmYR+2M0+qSFQV+2i2DH34F6LgIzWQz/REdIEy8m37LRFxk8CV7nyrZqqnGHDOUNkoSB9jQ9vXMGkd
#私钥文件
[root@node201 .es]# cat key_file
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAuJZcgLYwJD769lUYo/rj34jD6nH82d4Yw48lcAj11Co9imqZ
++nA3I7kvJMzMaIZY3tH6wvUghkuoUSxTxDtPiJt9rM5jRP4gED2Kn1My3+yY8nV
2P1YxiWMmsKDFNshmbjxU4md1IrqjtJUL9Wto0yMEfyFanBtdmI0P42hwCXJVJkQ
myg4otj3WvHs4appKUliDPTV9JOvSoVSiTF9cdqtTGJ2UWh8edxd3fVwVFxVC97W
8Fq2EuwslrJcOxkSangCjkk25mEftjNPqkhUFftotgx9+Bei4CM1kM/0RHSBMvJt
+y0RcZPAle58q2aqpxhwzlDZKEgfY0Pb1zBpHQIDAQABAoIBACjmH/7g30/YqJCW
EEydFYp86jPzJ7w6SrBh8kCdq6Jj7ZjSv+WiSHpWKvZhgzFXIlr5gNjimSZuX/eZ
mdPUA00GIelMks7gguof+qs1ciOQ2rzjhr96ewYEYeAUgyjG2O4PnWEOF+t1ED2u
+rpSlROerVZ65jDMUmSto7gFMLa7CEjCEgp6pKYQ3QAIla9y/ELzWOqc5MUhlcz2
6S2hZfFY6xw+IETaJb+AGT+unoXGxhbpPWz1OOzQXFnj4YJ6v9LjqpOdTA06+oe1
e0PcHpg8z3HJOtJTeBn5SIfcAIZmayHsa2rXP/1TxYRmgyDtTPDG2SGjn/UiGMFd
7j2eWmECgYEA2pq4b2DqXHF79qfcn0ARX5nlktcTKmohS6Ye83POFsfUf36wY3NF
UDKuFFA/uCthd2IyZb9dQbKqxCZOVQS6M+CQMntda9O3ovakfqvFERroY5YOnMsw
08UtRN3cYmr218m3TEUxnPEKR2dOVHVhTrwW+669ouhmzfRYQf6fcyUCgYEA2Cnx
XSZX5Zg0oTOcUORieoyzDpb4pwJyDjMC2X6Fc45QEwVvtOt1Q3wgFQ5tGWpzggMI
TeSx928hP6O95aOicDgB1/MMhQ5prBbglUbOG+zAe9CX87HA4U8Vsy/Lj7ERLVzl
6++Viodqsdu/h0wsf8r+dkvCXFV1NxGctxn6uJkCgYBJsJYzlWvrNaYgA33vgN1a
aLpmwXGIfrYylhEg6Ay0yS/sunwjShw3aJ4d4t9X6ee1Irjya4u4Nc4yyObm6e0K
x8xT+BoJ2xiwKoxQ1v5bQcLMryzF1gjjmjgkWtWLp5sGKs1LPJf425gncb+J4Peo
XucweDscy1K8Yn3N4VNGsQKBgQDFipbzTF4ZCF5YTqT0W7IPUlMz6w2y+g4nIcDh
57inII/WwioSiPaxxFZBR9y11E1Yq9LD9FIaz+jvkoCwwjhpGxW8NnXjhodVZ9a3
NGyYomRJAhhK8M9WV4J6LRx25RbQgMvxMBJV9WiwvyQpzZgA9Q5UJumoncQvnh28
SraQSQKBgCIJVUbItA9NRgCeweyZYVjyUyKFqIfI16BWvM+ixsyLYjYOsnpQo0A2
2EQMoj3j+qa3nXIhwgeOE9jSwXbhxMc9htqzqtxmy0z2Semvsds8vfEO7Dtx5T3K
p8bKxUqB9kU8brBK+xcmROu9871DMGYub61HNXCk6mA1CM2PNdHT
-----END RSA PRIVATE KEY-----

2)ssh密钥文件

#公钥文件
[root@node201 .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCUtrgWHGCxEk4KPrpgPg7xgcZGJ2KHnb08d2pe356jhZCa32iPYlvHRa7DW4/17yTMu7YvVnfuzMfM7Nnq1CpHOvtNrSxluJceaDvn2dptZ4BmvNDaRvSaxhpPjMq766DICj5Hd1Wwz8qoSFZUYr3EMLWuO5Q07ov/C7xAeGlIbbN1O3c44evWR5nnGMOpvspt6UOv8XqVsan+bFmGUjnPc2JbvFi+PwUuNpw5HOpOuHO60Tu53NCNTHFdfPunh8CFb1dQmfH4Tpqr6TM9icGaQCjcaWSlbErPP3LevwP2kWyPMWDU7lGJSEr7kTv3mFEJypmPblCBKHgFqn1PR30X root@srv01
#私钥文件

[root@node201 .ssh]# cat id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAlLa4FhxgsRJOCj66YD4O8YHGRidih529PHdqXt+eo4WQmt9o
j2Jbx0Wuw1uP9e8kzLu2L1Z37szHzOzZ6tQqRzr7Ta0sZbiXHmg759nabWeAZrzQ
2kb0msYaT4zKu+ugyAo+R3dVsM/KqEhWVGK9xDC1rjuUNO6L/wu8QHhpSG2zdTt3
OOHr1keZ5xjDqb7KbelDr/F6lbGp/mxZhlI5z3NiW7xYvj8FLjacORzqTrhzutE7
udzQjUxxXXz7p4fAhW9XUJnx+E6aq+kzPYnBmkAo3GlkpWxKzz9y3r8D9pFsjzFg
1O5RiUhK+5E795hRCcqZj25QgSh4Bap9T0d9FwIDAQABAoIBACh0XDeHmLYSqLAY
yFKODzqbdvh2llMWEfh087bDVkBdgSzgQW1f8F+RES2LpuncGEKpfbH6771Cb8fL
VqyO8sFVxi8nQMCbKmDXMhSsKsNAOKm6C4aVbsz7vwSM5Emim6ZPQwnl6KWkoRiO
NQ3Xno/UQFgZVQPhMKw84QUYvGs7IkEAKNvcQIq9z1DYLuDZNZKv4s8byo+tm2Rl
B1VyNzH2/enrYx9mchJo8q7tTlIC32n2m/BlTdbyfCwlXqdHVb3RzwYiHwMunBIy
hzC3mEh54NFADJySPipbkuJbWFWjj1Cgpls7PF04ig2r4wcgDIMhW+6/fUKxJwLV
izgAOUECgYEAxQG07kn9nuGY06LyZNv7FEDHBnRz2kNrXBUEln5Edsalsrlfr1qI
hROCRQ3/u+77iF/UiUKH5mj8wwhU32qUj3/iuPdJpgHESaXMovfmjzNPvm9PDZNx
FKtfScDvRdFLIeizEDwH9Wx1RT1R0u4t72Ro/IsvCQuwc4HYoTFw+u8CgYEAwT7v
cmrTlJhYtAU0j7nVFJr9vqdvs8zm2y4JkV6lylOOVYBXE0PBRw5tRjngKhNximN1
dh0Fj53Jk5YYu/aPaFFQ7bqKEAlp/WIINe7sh8+d+VgCw4+r6HnHCuBg6B5TfRP4
YnZMqYg4S6uq3cOzC523GBqn/O5Iff71U64DwFkCgYAJwGfgU7FGKAyUjUBKVck7
22j+nM0PRL8Ps8qiWGWzK2oQSrS9zVFspOaR3HuIJfA1c+jlUnG/qfq4/LSWyoPI
BqCGX1c57GR28MoMVxEGjZeo6YGUPnQefc0drXsqjY2WhBo493+9Wj0DzGE8e6Wy
b9nyhkExxW5aiVbbw8K/6QKBgQCifcwT9pWwliXIQbQ/wm/UorsIzHvVwU7BMEXl
UaOwrG+7n24YidmEaTIjYdkHKFBJoHYNejvJ1lDAY+6qZpmRiwa0zyz2bSQNZpgm
2Z9UV5SrLIEudamEkpl2oNN7eryTKO6rxHOT/jHwFwpW7Q6pjtV9VDS7LpYQNAmP
cnw/CQKBgD4LGWxz/VStaGVtPulIHvrscroMP2cEmmsR6dxnVkA6z/iE2tUyMuxm
z2fCKD7VEE5HlEc7Fpt5U48iNLKCt+HALrB9nJfE2iqkSia3JwwJxmMkTiyjc67V
FOBVpA4m8188UlzCEejUbtns9dF09s5hKsIKo93wuLVNNdjwgcXV
-----END RSA PRIVATE KEY-----

3、测试节点之间的连接
如下所示,在通过客户端连接远程节点(192.168.1.202)或本节点后,并执行date命令,必须保证节点之间通过sys_securecmdd互联是互信,无需输入密码,并成功执行命令。

[kingbase@node201 bin]$ ./sys_securecmd  root@192.168.1.202 'date'
Fri Jan 19 14:17:23 CST 2024
[kingbase@node201 bin]$ ./sys_securecmd  kingbase@192.168.1.202 'date'
Fri Jan 19 14:17:31 CST 2024

[kingbase@node201 bin]$ ./sys_securecmd  kingbase@127.0.0.1 'date'
Fri Jan 19 00:43:58 CST 2024
[kingbase@node201 bin]$ ./sys_securecmd  root@127.0.0.1 'date'
Fri Jan 19 00:44:05 CST 2024

四、sys_securecmdd配置
如下所示,配置文件存储在/etc/.kes下,默认配置一般不需要修改,可以通过配置文件修改服务端口、客户端认证(UsePAM)等。

[root@node201 ~]# ls -lh /etc/.kes
total 8.0K
drwxr-xr-x. 2 root root   6 Aug 25 16:49 empty
-rwxr-xr-x. 1 root root 376 Aug 25 16:49 securecmd_config   --客户端配置文件
-rwxr-xr-x. 1 root root 664 Aug 25 16:49 securecmdd_config  --服务端配置文件

1、客户端配置文件

[root@node201 .kes]# cat securecmd_config
Port 8890               --指定服务端口(默认:8890)
ForwardX11Trusted yes
SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
SendEnv XMODIFIERS
IdentityFile ~/.es/key_file    ---私钥文件
StrictHostKeyChecking no

2、服务端配置文件

[root@node201 .kes]# cat securecmdd_config
Port 8890                --指定服务端口(默认:8890)
HostKey ~/.es/key_file                     --私钥文件
AuthorizedKeysFile      .es/accept_hosts   --公钥文件
PidFile /var/run/sys_securecmdd.pid
AddressFamily any
LogLevel QUIET
PasswordAuthentication yes
IgnoreUserKnownHosts yes
ChallengeResponseAuthentication no
X11Forwarding no
Subsystem sftp /home/kingbase/cluster/securecmdd/bin/sys_secureftp
# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
MaxStartups 128:10:256
UsePAM yes                     --客户端认证是否启动PAM方式
# set TCP_USER_TIMEOUT, fixed unit be ms
TcpUserTimeout 9000

3、修改服务端口
如下所示,修改服务端和客户端配置文件,指定对应的端口:(注意在集群环境注意也要修改相应的集群配置文件install.conf、repmgr.conf等)

[root@node201 .kes]# cat securecmdd_config
Port 8899                --指定服务端口(默认:8890)

[root@node201 .kes]# cat securecmd_config
Port 8899               --指定服务端口(默认:8890# 重启后服务端口号
[root@node101 .kes]# netstat -an|grep 889
tcp        0      0 0.0.0.0:8899            0.0.0.0:*               LISTEN
tcp6       0      0 :::8899                 :::*                    LISTEN

五、sys_securecmdd应用
sys_securecmdd用于集群或sys_backup.sh物理备份在节点上远程执行命令。

1、集群节点远程执行命令
1)repmgr.conf配置使用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'  # on,使用sys_securecmdd;off,使用ssh。

2)集群节点远程执行命令
如下所示,集群sys_monitor.sh在启动时,远程通过sys_securecmdd执行数据库服务启动:

/home/kingbase/cluster/R6C8/HAC8/kingbase/bin/sys_securecmd -o StrictHostKeyChecking=no 
-o ConnectTimeout=10 -q -o ConnectTimeout=10 -o StrictHostKeyChecking=no 
-p 8890 -o ServerAliveInterval=2 -o ServerAliveCountMax=3 -l kingbase 
-T 192.168.1.201 '/home/kingbase/cluster/R6C8/HAC8/kingbase/bin/sys_ctl 
-D /home/kingbase/cluster/R6C8/HAC8/kingbase/data -w -t 60 
-l /home/kingbase/cluster/R6C8/HAC8/kingbase/data/../logfile start'

如下所示,failover切换,远程卸载原主库vip:

[2024-01-03 16:20:29] [DEBUG] DoRemoteCommand():
sys_securecmd -o Batchmode=yes -q -o ConnectTimeout=10 -o StrictHostKeyChecking=no
   -p 8890 -o ServerAliveInterval=2 -o ServerAliveCountMax=3 192.168.1.201 
   /home/kingbase/cluster/R6C8/HAC8/kingbase/bin/kbha -A unloadvip

2、sys_backup.sh物理备份
1)sys_backup.conf配置

[kingbase@node201 bin]$ cat sys_backup.conf |grep scmd
_use_scmd=on  # on,使用sys_securecmdd;off,使用ssh。

2)sys_backup.sh init中远程执行命令

/home/kingbase/cluster/R6C8/HAC8/kingbase/bin/sys_securecmd -q -n
 -o ConnectTimeout=30 -o StrictHostKeyChecking=no 
 -o PreferredAuthentications=publickey -- kingbase@192.168.1.202 mkdir
  -p /home/kingbase/kbbr_repo/

四、总结
本文介绍了KingbaseES集群组件sys_securecmdd的初步应用,后续文档将介绍sys_securecmdd故障案例分析等,帮助大家进一步加深了解sys_securecmdd工具的应用。

posted @   天涯客1224  阅读(159)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示