1.はじめに
nutanixにはallsshという便利なコマンドが存在します。
例えばallssh lsblkなどの様に実行すると、以下の様にあらかじめ登録したサーバすべてに対してコマンドを実行してくれます。
※最後に同じコマンドを自分自身で実行します。
allssh lsblk
================= dev1 =================
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 40G 0 disk
|-sda1 8:1 0 1M 0 part
|-sda2 8:2 0 200M 0 part /boot/efi
|-sda3 8:3 0 1G 0 part /boot
`-sda4 8:4 0 38.8G 0 part /
sdb 8:16 0 2G 0 disk
sdc 8:32 0 2G 0 disk
sdd 8:48 0 2G 0 disk
sde 8:64 0 2G 0 disk
================== dev2 =================
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
~~~中略~~~
================== dev9 =================
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 18.9G 0 part /
├─sda13 8:13 0 1023M 0 part /boot
├─sda14 8:14 0 4M 0 part
└─sda15 8:15 0 106M 0 part /boot/efi
================== 192.168.1.22 (Local) =================
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda 252:0 0 10G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 9G 0 part
├─almalinux-root 253:0 0 8G 0 lvm /
└─almalinux-swap 253:1 0 1G 0 lvm [SWAP]
これはどうもシェル関数で実装されているもののようです。
本稿はこれと同じものを再現するというものです。
2.手順
.bashrcに書き込む
vi .bashrc
- .bashrcの最下部に以下を書き込みます
# ALLSSH
__allssh ()
{
# 管理したい対象サーバーのIPアドレスをスペース区切りで並べる
# (例: 192.168.1.11, 12, 13)
local HOSTS="192.168.1.11 192.168.1.12 192.168.1.13"
# 名前解決できる場合は以下の様にホスト名でOK
#local HOSTS="dev1 dev2 dev3 dev4 dev5 dev6 dev7 dev8 dev9 al9"
# 自分のIPアドレスを取得(除外用。環境に合わせて変更してください)
local MY_IP=$(hostname -I | awk '{print $1}')
local OPTS="-q -o LogLevel=ERROR -o StrictHostKeyChecking=no -t"
# 他のサーバーで実行
for i in $HOSTS; do
if [ "x$i" == "x$MY_IP" ]; then
continue
fi
echo "================== $i ================="
/usr/bin/ssh $OPTS $i "source /etc/profile; $@"
done
# 最後に自分のサーバーで実行
echo "================== $MY_IP (Local) ================="
$@
}
alias allssh='__allssh'
- すべてのサーバにssh接続するため、パスワード認証だと毎回パスワード入力が求められます。
- 鍵認証でログインできるようにすると、幸せになれます。
- 設定した後は再ログインする必要があります。
3.やってみる
以下の様にコマンドを実行して表示されたら成功です!
$ allssh "uname -r"
================== dev1 =================
6.12.0-211.22.1.el10_2.x86_64_v2
================== dev2 =================
5.14.0-611.45.1.el9_7.x86_64
================== dev3 =================
5.15.0-181-generic
================== dev4 =================
6.12.0-124.49.1.el10_1.x86_64_v2
================== dev5 =================
6.12.0-124.49.1.el10_1.x86_64_v2
================== dev6 =================
4.18.0-553.120.1.el8_10.x86_64
================== dev7 =================
5.14.0-611.5.1.el9_7.x86_64
================== dev8 =================
6.8.0-124-generic
================== dev9 =================
7.0.0-22-generic
================== 192.168.1.22 (Local) =================
5.14.0-611.54.6.el9_7.x86_64
- パイプを使う場合は"(ダブルクォーテーション)で囲む必要がある場合があります。
蛇足
sudoコマンドを実行させたい場合はあらかじめ各サーバでNOPASSWDなどを記述する必要があるのでご注意ください。
nutanixの場合もCVMのsudoersを見てみると以下の様に記述があります。
nutanix ALL=(ALL) NOPASSWD: ALL