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 建立使用者帳戶並設定密碼。
啟動外圍程序,然後建立使用者
hareport
(其主目錄為/home/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
。尋找以下類別:
主機別名規格
、使用者別名規格
、Cmnd 別名規格
和Runas 別名規格
。將以下項目新增至
/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"