0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?