D 在没有 root
访问权的情况下运行群集报告 #
所有群集节点都必须能通过 SSH 相互访问。crm report
(用于查错)等工具和 Hawk2 的 要求节点之间采用无口令 SSH 访问方式,否则它们只能从当前节点收集数据。
如果无口令 SSH root
访问不符合法规要求,可以使用一种变通方法来运行群集报告。该变通方法主要包括以下几个步骤:
创建专用的本地用户帐户(用于运行
crm report
)。为该用户帐户配置无口令 SSH 访问(最好是使用非标准 SSH 端口)。
为该用户配置
sudo
。以该用户的身份运行
crm report
。
默认情况下,crm report
在运行时会先以 root
身份尝试登录远程节点,如果无法登录,则以 hacluster
用户身份登录。但是,如果您的本地安全策略阻止使用 SSH 进行 root
登录,则对所有远程节点执行脚本将会失败。即使尝试以 hacluster
用户身份运行脚本也会失败,因为这是一个服务帐户,其外壳设置为 /bin/false
,因此会阻止登录。创建专用的本地用户是对高可用性群集中的所有节点成功运行 crm report
脚本的唯一可行做法。
D.1 创建本地用户帐户 #
在下面的示例中,我们将通过命令行创建名为 hareport
的本地用户。口令可以是符合安全要求的任何值。或者,您也可以使用 YaST 创建用户帐户并设置口令。
启动外壳,然后创建主目录为
/home/hareport
的用户hareport
:root #
useradd
-m -d /home/hareport -c "HA Report" hareport为该用户设置口令:
root #
passwd hareport根据提示输入该用户的口令两次。
要在所有节点上创建相同的用户帐户,请在每个群集节点上重复上述步骤。
D.2 配置无口令 SSH 帐户 #
默认情况下,SSH 守护程序与 SSH 客户端将在端口 22
上通讯和侦听。如果您的网络安全方针要求将默认 SSH 端口更改为编号较高的备用端口,您需要修改守护程序的配置文件 /etc/ssh/sshd_config
。
要修改默认端口,请在该文件中搜索
Port
一行,取消注释该行,然后根据需要进行编辑。例如,可将该行设置为:Port 5022
如果您的组织不允许
root
用户访问其他服务器,请在该文件中搜索PermitRootLogin
项,取消注释该项,然后将它设置为no
:PermitRootLogin no
或者,通过执行以下命令,在该文件的末尾添加相应的行:
root #
echo “PermitRootLogin no” >> /etc/ssh/sshd_configroot #
echo “Port 5022” >> /etc/ssh/sshd_config修改
/etc/ssh/sshd_config
后,重启动 SSH 守护程序以使新设置生效:root #
systemctl restart sshd
在每个群集节点上重复上述 SSH 守护程序配置。
如果要在群集中的所有节点上进行 SSH 端口更改,一种有效的做法是修改 SSH 配置文件 /etc/ssh/sshd_config
。
要修改默认端口,请在该文件中搜索
Port
一行,取消注释该行,然后根据需要进行编辑。例如,可将该行设置为:Port 5022
或者,通过执行以下命令,在该文件的末尾添加相应的行:
root #
echo “Port 5022” >> /etc/ssh/ssh_config
只需在要运行群集报告的节点上进行上述 SSH 客户端配置。
或者,您可以使用 -X
选项并结合自定义 SSH 端口来运行 crm report
,甚至可以将 crm report
指定为默认使用自定义 SSH 端口。有关细节,请参见过程 D.5 “使用自定义 SSH 端口生成群集报告”。
您可以使用 SSH 访问其他服务器,系统不会要求您输入口令。这种访问方法乍看之下似乎并不安全,但其实是非常安全的,因为用户只能访问共享了其公共密钥的服务器。共享密钥必须以使用该密钥的用户身份来创建。
使用您为了运行群集报告而创建的用户帐户登录某个节点(在上面的示例中,该用户帐户为
hareport
)。生成新密钥:
hareport >
ssh-keygen –t rsa默认情况下,此命令将生成 2048 位密钥。密钥的默认位置为
~/.ssh/
。系统会提示您对该该密钥设置一个通行口令。但请勿输入通行口令,因为要进行无口令登录,就不能对密钥设置通行口令。生成密钥后,将公共密钥复制到其他每个节点(包括您在其中创建了该密钥的节点):
hareport >
ssh-copy-id -i ~/.ssh/id_rsa.pub HOSTNAME_OR_IP在该命令中,您可以使用每个服务器的 DNS 名称、别名或 IP 地址。在复制过程中,系统会要求您接受每个节点的主机密钥,并且您需要提供
hareport
用户帐户的口令(只需要输入这一次)。在所有群集节点上共享密钥后,使用无口令 SSH 来测试您是否能够以
hareport
用户的身份登录其他节点:hareport >
ssh HOSTNAME_OR_IP您应该会自动连接到远程服务器,系统不会要求您接受证书或输入口令。
如果您打算每次都从同一个节点运行群集报告,则在这个节点上执行上述过程便已足够。否则,您需要在每个节点上重复上述过程。
D.3 配置 sudo
#
使用 sudo
命令可让普通用户在提供或不提供口令的情况下快速变成 root
并发出命令。可向所有 root 级命令或者特定的命令授予 sudo 访问权限。Sudo 通常使用别名来定义整个命令字符串。
要配置 sudo,请使用 visudo
(不是 vi)或 YaST。
要从命令行配置 sudo,必须以 root
身份使用 visudo
编辑 sudoers 文件。使用任何其他编辑器可能会导致语法或文件权限错误,进而阻止 sudo 运行。
以
root
身份登录。要打开
/etc/sudoers
文件,请输入visudo
。查找以下类别:
Host alias specification
、User alias specification
、Cmnd alias specification
和Runas alias specification
。将以下几项添加到
/etc/sudoers
中的相应类别:Host_Alias CLUSTER = alice,bob,charlie 1 User_Alias HA = hareport 2 Cmnd_Alias HA_ALLOWED = /bin/su, /usr/sbin/crm report *3 Runas_Alias R = root 4
主机别名定义 sudo 用户有权在哪个服务器(或特定范围内的服务器)上发出命令。在主机别名中,可以使用 DNS 名称或 IP 地址,或者指定整个网络范围(例如
172.17.12.0/24
)。要限制访问范围,应该仅指定群集节点的主机名。使用用户别名可将多个本地用户帐户添加到单个别名。但是,在这种情况下,您可以避开创建别名步骤,因为系统只会使用一个帐户。在上例中,我们添加了为运行群集报告而创建的
hareport
用户。命令别名定义该用户可执行的命令。如果您要限制非 root 用户在使用
sudo
时可以访问的项目,命令别名将十分有用。在这种情况下,hareport
用户帐户需要对crm report
和su
命令拥有访问权限。runas
别名指定命令的运行帐户。在本例中为root
。搜索以下两行:
Defaults targetpw ALL ALL=(ALL) ALL
由于这两行与我们要创建的设置相冲突,因此请将其禁用:
#Defaults targetpw #ALL ALL=(ALL) ALL
查找
User privilege specification
。定义上述别名后,现在可以添加以下规则:
HA CLUSTER = (R) NOPASSWD:HA_ALLOWED
NOPASSWORD
选项确保用户hareport
无需提供口令就能执行群集报告。
必须在群集中的所有节点上指定这项 sudo 配置。无需为 sudo 做出其他更改,并且无需重启动任何服务。
D.4 生成群集报告 #
要使用上面配置的设置运行群集报告,需要以 hareport
用户的身份登录某个节点。要启动群集报告,请使用 crm report
命令。例如:
root #
crm report
-f 0:00 -n "alice bob charlie"
此命令将在指定的节点上提取从凌晨 0 点
开始的所有信息,并在当前目录中创建名为 pcmk-日期.tar.bz2
的 *.tar.bz2
存档。
使用自定义 SSH 端口时,请结合使用
-X
和crm report
来修改客户端的 SSH 端口。例如,如果自定义 SSH 端口为5022
,则使用以下命令:root #
crm report -X "-p 5022" [...]要为
crm report
永久设置自定义 SSH 端口,请启动交互式 crm 外壳:crm options
输入以下内容:
crm(live)options#
set core.report_tool_options "-X -oPort=5022"