複数のLinuxサーバーで複数のコマンドを実行する方法
複数のLinuxサーバーを管理している場合、すべてのLinuxサーバーで複数のコマンドを実行したいが、その方法がわからない場合でも心配する必要はありません。この簡単なサーバー管理ガイドでは、複数のLinuxサーバーで同時に複数のコマンドを実行する方法をご紹介します。
これを実現するために、pssh(並列ssh)プログラムを使用できます。これは、複数のホストに対してsshを並列に実行するためのコマンドラインユーティリティです。これを使うことで、シェルスクリプトからすべてのsshプロセスに入力を送信できます。
要件
- Psshをインストールして複数のリモートLinuxサーバーでコマンドを実行する
- すべてのリモートサーバーに対してSSHパスワードなし認証を使用している必要があります。
シェルスクリプトを作成する
したがって、最初に異なるサーバーで実行したいLinuxコマンドを含むスクリプトを準備する必要があります。この例では、複数のサーバーから以下の情報を収集するスクリプトを作成します:
- サーバーの稼働時間を確認する
- 誰がログインしていて、何をしているかを確認します。
- メモリ使用量に基づいて上位5つの実行中のプロセスをリストします。
まず、お好きなエディタでcommands.shというスクリプトを作成してください。
# vi commands.sh
次に、スクリプトに以下のコマンドを示されているように追加してください。
#!/bin/bash
###############################################################################
#Script Name : commands.sh
#Description : execute multiple commands on multiple servers
#Author : Aaron Kili Kisinga
#Email : [email
################################################################################
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ファイルに追加します。この形式で、[user@]host[:port]または単にサーバーのIPアドレスを指定します。
しかし、リモートアクセスを簡素化するために、カスタムSSH接続を設定する方法で説明されているように、.ssh/configファイルに指定できるSSHエイリアスを使用することをお勧めします。
この方法はより効率的で信頼性が高く、各リモートサーバーに対してホスト名、識別ファイル、ポート、ユーザー名などの設定オプションを指定することができます。
以下は私たちのサンプルSSHホストエイリアスファイル、いわゆるユーザー固有の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– ホストファイルを読み取ります。-P– psshに出力を到着した時点で表示することを指示します。- -I - 入力を読み取り、各sshプロセスに送信します。
それで終わりです!この記事では、Linuxで複数のサーバーで複数のコマンドを実行する方法を示しました。このトピックに関するご意見があれば、下のコメントセクションで共有してください。

