複数のLinuxサーバーで複数のコマンドを実行する方法


複数のLinuxサーバーを管理していて、すべてのLinuxサーバーで複数のコマンドを実行したいが、その方法がわからない場合。この単純なサーバー管理ガイドでは、心配する必要はありません。複数のLinuxサーバーで複数のコマンドを同時に実行する方法を紹介します。

これを実現するには、pssh(parallel ssh)プログラムを使用します。これは、sshを多数のホスト上で並列に実行するためのコマンドラインユーティリティです。これを使えば、シェルスクリプトからすべてのsshプロセスに入力を送ることができます。

  1. Install Pssh to Run Commands on Multiple Remote Linux Servers
  2. You must be using SSH passwordless authentication for all remote servers.

シェルスクリプトを作成する

そのため、異なるサーバー上で実行したいLinuxコマンドを含むスクリプトを準備することから始める必要があります。この例では、複数のサーバーから次の情報を収集するスクリプトを作成します。

  • Check uptime of servers
  • Check who is logged on and what they are doing
  • List top 5 running processes according to memory usage.

まず、お気に入りのエディタで commands.sh というスクリプトを作成します。

# vi commands.sh

次に、示されているようにスクリプトに次のコマンドを追加します。

#!/bin/bash 
###############################################################################
#Script Name    : commands.sh                       
#Description    : execute multiple commands on multiple servers                                                                     
#Author         : Aaron Kili Kisinga       
#Email          : [email protected] 
################################################################################
echo
# show system uptime
uptime
echo
# show who is logged on and what they are doing
who
echo
# show top 5 processe by RAM usage 
ps -eo cmd,pid,ppid,%mem,%cpu --sort=-%mem | head -n 6

exit 0

ファイルを保存して閉じます。次に、図のようにスクリプトを実行可能にします。

# chmod +x commands.sh

PSSHホストファイルを作成する

次に、コマンドを実行するサーバーのリストを hosts.txt ファイルに [[email protected]] host [:port] または単にサーバーのIPアドレスを指定します。

ただし、リモートアクセスを簡単にするためのカスタムSSH接続の設定方法で説明されているように、 .ssh/config ファイルで指定できるSSHエイリアスを使用することをお勧めします。

この方法はより効率的で信頼性が高く、各リモートサーバーの設定オプション(ホスト名、ファイルの識別、ポート、ユーザー名など)を指定できます。

以下は、sshホスト別名ファイルa.k.aのユーザー固有のssh構成ファイルの例です。

# vi ~/.ssh/config

次に、 hosts.txt ファイルを作成します。ここに表示されているように、エイリアス( .ssh/configファイルのHostキーワードを使用して定義された名前)を指定するだけです。

# vi hosts.txt 

サーバーの別名を追加します。

server1
server2
server3

複数のLinuxサーバーでスクリプトを介してコマンドを実行する

次に、 hosts.txt ファイルを複数のリモートサーバーで実行するための複数のコマンドを含むスクリプトと共に指定して、次の pssh コマンドを実行します。

# pssh -h hosts.txt -P -I<./commands.sh

上記のコマンドで使用されるフラグの意味

  • -h – reads the hosts file.
  • -P – tells pssh to display output as it arrives.
  • -I – reads input and sends to each ssh process.

それでおしまい!この記事では、Linuxの複数のサーバーで複数のコマンドを実行する方法を説明しました。以下のコメント欄でこのトピックに関する考えを共有できます。