FAQ

用户在openGauss节点间的互信丢失

问题现象

在给某个用户配置好互信之后,有时候信任关系会突然丢失,ssh时提示需要输入密码。

  1. sc_ssh@node1:~/.ssh> ssh node2
  2. Password:

可能原因

  • sshd服务未运行。
  • 防火墙禁止ssh访问。
  • 当前用户对根目录的权限不足。
  • 当前用户对公钥文件的权限不足。
  • “known_hosts”文件里记录的key和IP地址冲突。
  • 公钥不匹配。

操作步骤

  • 确认是否由于sshd服务未运行。

    1. 执行命令service sshd status查看sshd服务状态。
    2. 如果sshd服务关闭,使用service sshd start启动sshd服务。
  • 确认是否由于开启了系统防火墙导致ssh互信丢失。

    1. 执行命令: systemctl status firewalld.service查看openGauss防火墙状态。
    2. 如果显示系统防火墙打开,使用: systemctl stop firewalld.service命令关闭防火墙。
  • 确认是否由于当前用户对根目录的权限不足。

    1. 使用ll命令查看根目录属性,确认目录属组是否为互信用户的属组,同时确认用户对目录是否有读和写权限。
    2. 用chown命令修改文件属组,用chmod命令修改目录权限,使其满足要求。
  • 确认是否由于当前用户对公钥文件的权限不足。

    1. 查看“~/.ssh/id_rsa.pub”文件,确认文件属组是否为互信用户的属组,同时确认用户对文件是否有读和写权限。
    2. 用chown命令修改文件属组,用chmod命令修改目录权限使其满足要求。
  • 确认是否由于“known_hosts”文件里记录的key和IP地址冲突。

查看“~/.ssh/known_hosts”文件里记录的key和IP地址是否一致,如果不一致,可能是由于所指定的IP发生了变化等原因导致了异常。此时,删除“.ssh/known_hosts”文件里面原来的公钥信息即可。

  • 确认是由于公钥不匹配。

排除掉上面的所有原因后,如果问题仍存在,可能是公钥不匹配。此时,请删除公钥目录.ssh下的所有文件,按照下面的手工建立互信重新配置。

使用脚本建立互信

  1. 创建一个执行互信脚本所需要的输入文本,并在此文件中添加openGauss中所有主机IP。

    1. plat1:/opt/software/openGauss> vim hostfile
    2. 192.168.0.1
    3. 192.168.0.2
    4. 192.168.0.3
  2. 以需要创建互信的用户执行脚本。

  3. 执行下面脚本建立互信。

    1. plat1:/opt/software/openGauss/script# ./gs_sshexkey -f /opt/software/hostfile

/opt/software/hostfile为主机列表,列出所有需要建立互信机器的主机IP。

手工建立互信

如果openGauss各主机的root密码不一致,gs_preinstall脚本无法建立互信,可以手工建立互信。

FAQ - 图1 说明:

建立互信的过程中需要生成如下4个文件:authorized_keys、id_rsa、id_rsa.pub、known_hosts。请勿删除或破坏这些互信相关的文件。

手工建立信任关系,步骤如下,plat1,plat2,plat3是主机名:

  1. 在其中一个主机上,生成root用户的本机授权文件。假设在主机plat1上执行。

    a. 生成密钥。

    1. ssh-keygen -t rsa

    示例如下:

    1. plat1:~ # ssh-keygen -t rsa
    2. Generating public/private rsa key pair.
    3. Enter file in which to save the key (/root/.ssh/id_rsa):
    4. Created directory '/root/.ssh'.
    5. Enter passphrase (empty for no passphrase):
    6. Enter same passphrase again:
    7. Your identification has been saved in /root/.ssh/id_rsa.
    8. Your public key has been saved in /root/.ssh/id_rsa.pub.
    9. The key fingerprint is:
    10. d5:35:46:33:27:22:09:f0:1e:12:a7:87:fa:33:3f:ab root@plat1
    11. The key's randomart image is:
    12. +--[ RSA 2048]----+
    13. | o.o.....O .|
    14. | * .o + * |
    15. | + + . . |
    16. | . + o |
    17. | . S |
    18. | . |
    19. | + |
    20. | +. |
    21. | E.oo |
    22. +-----------------+

    b. 生成本机授权文件。

    1. cat .ssh/id_rsa.pub >> ~/.ssh/authorized_keys

    示例如下:

    1. plat1:~ # cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  2. 收集所有的待建互信主机的公钥,写入到本机的known_hosts文件中。此步骤需要在步骤1执行的主机上执行。需要收集plat1、plat2、plat3三个主机的公钥。

    a. 收集plat1的公钥,写入到本机known_hosts文件中。

    1. ssh-keyscan -t rsa plat1 >> ~/.ssh/known_hosts

    示例如下:

    1. plat1:~ # ssh-keyscan -t rsa plat1 >> ~/.ssh/known_hosts
    2. # plat1 SSH-2.0-OpenSSH_5.1

    b. 收集plat2的公钥,写入到本机known_hosts文件中。

    1. ssh-keyscan -t rsa plat2 >> ~/.ssh/known_hosts

    示例如下:

    1. plat1:~ # ssh-keyscan -t rsa plat2 >> ~/.ssh/known_hosts
    2. # plat2 SSH-2.0-OpenSSH_5.1

    c. 收集plat3的公钥,写入到本机known_hosts文件中。

    1. ssh-keyscan -t rsa plat3 >> ~/.ssh/known_hosts

    示例如下:

    1. plat1:~ # ssh-keyscan -t rsa plat3 >> ~/.ssh/known_hosts
    2. # plat3 SSH-2.0-OpenSSH_5.1

    FAQ - 图2 说明:

    • 当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分。

    • 如果该主机上known_hosts文件被删除,互信仍然可以使用,但是会有告警提示信息。如果需要规避告警提示信息,请将/etc/ssh/ssh_config配置文件中,StrictHostKeyChecking参数设置为no。

  3. 将互信文件分发到其它所有主机上。在本例中,需要将plat1上的互信文件分发到plat2和plat3上。

    a. 将互信文件分发到plat2上。Password输入拷贝目标主机的密码。

    1. scp -r ~/.ssh plat2:~

    示例如下:

    1. plat1:~ # scp -r ~/.ssh plat2:~
    2. Password:
    3. authorized_keys 100% 796 0.8KB/s 00:00
    4. id_rsa 100% 1675 1.6KB/s 00:00
    5. id_rsa.pub 100% 398 0.4KB/s 00:00
    6. known_hosts 100% 1089 1.1KB/s 00:00

    b. 将互信文件分发到plat3上。Password输入拷贝目标主机的密码。

    1. scp -r ~/.ssh plat3:~

    示例如下:

    1. plat1:~ # scp -r ~/.ssh plat3:~
    2. Password:
    3. authorized_keys 100% 796 0.8KB/s 00:00
    4. id_rsa 100% 1675 1.6KB/s 00:00
    5. id_rsa.pub 100% 398 0.4KB/s 00:00
    6. known_hosts 100% 1089 1.1KB/s 00:00
  4. 查看互信是否建成功,可以互相ssh主机名。输入exit退出。

    1. plat1:~ # ssh plat2
    2. Last login: Sat Jun 20 14:01:07 2020
    3. plat2:~ # exit
    4. logout
    5. Connection to plat2 closed.
    6. plat1:~ #

FAQ - 图3 说明: 如果三个以上节点,和上述过程类似。假设节点名为plat1、plat2、plat3、……。第一步,需要在plat1上生成root用户的本机授权文件;第二步,需要收集所有待建互信主机(plat1、plat2、plat3、……)的公钥并写入到本机known_hosts文件中;第三步,需要将互信文件分发到除本机外的所有其它主机(plat2、plat3、……)上;第四步,检查互信是否建立成功。