KingbaseES V8R6 备份恢复案例--异机备份ssh认证失败

发布时间 2023-06-06 15:37:01作者: KINGBASE研究院

案例说明:
在生产环境,数据库服务被重启后,监控发现数据库物理备份的脚本无法执行,故障现象如下所示,从备份日志和sys_log中都出现了远程主机连接认证错误。

1)备份日志:(连接数据库服务器认证错误)

2)sys_log日志:(归档错误)

适用版本:
KingbaseES V8R6

一、问题分析

1、备份架构

如下图所示,数据库服务器(137.7.*.9),外部备份服务器为(137.17.*.8)。

2、查看sys_rman.conf配置

3、查看备份脚本

4、手工执行备份脚本

如上图所示,在建立和备份服务器之间的ssh连接时,需要输入‘yes’确认信息。一般客户端通过ssh第一次连接服务端,会出现以上状况。

1)公钥检查
如果你是第一次登录对方主机,系统会出现下面的提示:

$ ssh user@host
  The authenticity of host 'host (12.18.429.21)' can't be established.
  RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
  Are you sure you want to continue connecting (yes/no)?

这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?
所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0??9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。
假定经过风险衡量以后,用户决定接受这个远程主机的公钥。
Are you sure you want to continue connecting (yes/no)? yes
系统会出现一句提示,表示host主机已经得到认可。
Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.

2)然后,会要求输入密码
Password: (enter password)

如果密码正确,就可以登录了。

3)将公钥存储在know_hosts文件中
如下图所示,第一次连接完成后,会将服务端公钥保存在know_hosts文件中,再次连接时就不需要确认公钥了。

二、问题解决
在手工执行了到备份服务器的ssh连接后,脚本备份正常,归档正常。此次故障原因应该是,在.ssh的目录下缺失know_hosts文件导致,执行备份脚本时,需要数据库服务器和备份仓库节点之间通过ssh连接,但是脚本无法执行ssh连接公钥的确认,导致脚本备份失败。

三、总结
如何让连接新主机时,不进行公钥确认?

在首次连接服务器时,会弹出公钥确认的提示。这会导致某些自动化任务,由于初次连接服务器而导致自动化任务中断。或者由于 ~/.ssh/known_hosts 文件内容清空,导致自动化任务中断。 SSH 客户端的 StrictHostKeyChecking 配置指令,可以实现当第一次连接服务器时,自动接受新的公钥。只需要修改 /etc/ssh/ssh_config 文件,包含下列语句:

Host *
 StrictHostKeyChecking no

如下图所示:

或者在 ssh 命令行中用 -o 参数
$ ssh -o StrictHostKeyChecking=no 192.168.0.110

如下图所示: