pssh は、多数のマシンでのバッチ ssh 操作に使用される、Python で実装されたオープン ソース ソフトウェアです。pssh は、複数のサーバーでコマンドを実行できるツールであり、ファイルのコピーもサポートしているため、この種のツールとしては優れています。for ループ アプローチよりも pssh を使用することをお勧めします。 pssh を使用する前提は、ローカル マシンと他のサーバー上でキー認証アクセス (つまり、ssh 信頼関係) を構成する必要があることです。 以下は pssh を使用したバッチ操作の記録です。 1) psshをインストールする yum 経由で直接インストールできます:
[root@bastion-IDC ~]# yum install -y pssh
2) psshの使用
[root@bastion-IDC ~]# pssh --help
-h コマンドを実行するためのリモートホストリストファイル -H user@ip:port ファイル内容フォーマット [user@]host[:port] -l リモートマシンのユーザー名 -p 一度に許可される接続の最大数 -o 出力をファイルにリダイレクトする -e 実行エラーをファイルにリダイレクトする -tはコマンド実行のタイムアウトを設定します -A はパスワードの入力を促し、それを ssh に渡します (このパラメータは追加後のプロンプトのみであり、適当に入力するか、入力せずに Enter キーを押すことができます) -O sshパラメータの特定の設定を設定します。ssh_config設定ファイルを参照してください。 -x は複数の SSH コマンドを渡します。複数のコマンドはスペースで区切られ、引用符で囲まれます。 -X -xと同じですが、一度に渡せるコマンドは1つだけです -i 各ホストの実行後に標準出力と標準エラーを表示する -I 各入力コマンドを読み取り、sshプロセスに渡して、コマンドスクリプトを標準入力にパイプできるようにします。
3) psshインスタンスの説明
[root@bastion-IDC ~]# cat hosts.txt // リスト ファイル内の情報形式は「ip:port」です。ローカル マシンとリモート マシンで使用される ssh ポートが同じ場合は、ポートを省略して IP を直接使用できます。ただし、すべてのポートを持参することをお勧めします。 192.168.1.101:22 192.168.1.109:22 192.168.1.118:25791 192.168.1.105:25791 上記のように、4 台のマシンはリスト ファイル hosts.txt に配置されています。ローカル マシンは、ssh パスワードなしログインのために、これらの 4 台のマシンと信頼関係を確立しています。注意: リスト ファイル内のマシンは、事前にローカル マシンと ssh 信頼関係を確立している必要があります。そうしないと、pssh をバッチで実行したときに、信頼関係を確立していないマシンの順番になっても実行されません。
a) コマンドのバッチ実行
[root@bastion-IDC ~]# pssh -h hosts.txt -l root -i 'uptime' [1] 16:05:48 [成功] 192.168.1.105 03:03:25 79 日間稼働、13:44、ユーザー 0 人、負荷平均: 0.04、0.01、0.00 [2] 16:05:48 [成功] 192.168.1.118 03:03:32 75 日間稼働、15:27、ユーザー 4 人、負荷平均: 0.96、0.74、0.45 Stderr: アドレス 192.168.1.118 は localhost にマップされますが、これはアドレスにマップされません - 侵入の試みの可能性があります。 [3] 16:05:48 [成功] 192.168.1.109 03:03:25 61 日間稼働、21:56、ユーザー 2 人、負荷平均: 0.02、0.06、0.18 Stderr: アドレス 192.168.1.102 は localhost にマップされますが、これはアドレスにマップされません - 侵入の試みの可能性があります。 [4] 16:05:48 [成功] 192.168.1.101 16:03:17 35 日間稼働、23:45、ユーザー 1 人、負荷平均: 0.03、0.04、0.01 Stderr: アドレス 192.168.1.101 は localhost にマップされますが、これはアドレスにマップされません - 侵入の試みの可能性があります。
-A パラメータを追加すると、事前に ssh 信頼関係を設定している場合でも、パスワードの入力を求められます。
[root@bastion-IDC ~]# pssh -h hosts.txt -l root -i -A 'uptime' 警告: 他のユーザーがスーパーユーザーである場合はパスワードを入力しないでください アカウントへの権限またはアクセス権。 パスワード: // このパラメータは追加後のリマインダーとしてのみ使用されることに注意してください。ここに何かを入力することも、何も入力せずに Enter キーを押すこともできます。 [1] 16:08:25 [成功] 192.168.1.105 03:06:03 79 日間稼働、13:46、ユーザー 0 人、負荷平均: 0.00、0.00、0.00 [2] 16:08:25 [成功] 192.168.1.109 03:06:03 61 日間稼働、21:59、ユーザー 2 人、負荷平均: 0.00、0.04、0.15 Stderr: アドレス 192.168.1.102 は localhost にマップされますが、これはアドレスにマップされません - 侵入の試みの可能性があります。 [3] 16:08:25 [成功] 192.168.1.101 16:05:54 35 日間稼働、23:47、ユーザー 1 人、負荷平均: 0.00、0.02、0.00 Stderr: アドレス 192.168.1.101 は localhost にマップされますが、これはアドレスにマップされません - 侵入の試みの可能性があります。 [4] 16:08:25 [成功] 192.168.1.118 03:06:10 75 日間稼働、15:29、ユーザー 4 人、負荷平均: 0.85、0.78、0.51 Stderr: アドレス 192.168.1.118 は localhost にマップされますが、これはアドレスにマップされません - 侵入の試みの可能性があります。 [root@bastion-IDC ~]# pssh -h hosts.txt -l root -i -t 10 -o /root/pssh.log '稼働時間 && 日付' [1] 17:01:02 [成功] 192.168.1.109 03:58:33 79 日間稼働、5:58、ユーザー 1 人、負荷平均: 0.00、0.00、0.00 2017年2月8日水曜日 03:58:33 EST [2] 17:01:02 [成功] 192.168.1.105 03:58:40 79 日間稼働、14:39、ユーザー 1 人、負荷平均: 0.00、0.00、0.00 2017年2月8日水曜日 03:58:40 EST [3] 17:01:02 [成功] 192.168.1.101 16:58:31 36 日、40 分、1 ユーザー、負荷平均: 0.10、0.03、0.01 2017年2月8日水曜日 16:58:31 CST Stderr: アドレス 192.168.1.101 は localhost にマップされますが、これはアドレスにマップされません - 侵入の試みの可能性があります。 [4] 17:01:02 [成功] 192.168.1.118 03:58:47 75 日間稼働、16:22、ユーザー 3 人、負荷平均: 0.20、0.21、0.31 2017年2月8日水曜日 03:58:47 EST Stderr: アドレス 192.168.1.118 は localhost にマップされますが、これはアドレスにマップされません - 侵入の試みの可能性があります。 [root@bastion-IDC ~]# ll /root/pssh.log/ 合計 16 -rw-r--r--. 1 ルート ルート 100 2月8日 17:01 192.168.1.101 -rw-r--r--。1 ルート ルート 99 2月 8日 17:01 192.168.1.105 -rw-r--r--。1 ルート ルート 99 2月 8日 17:01 192.168.1.109 -rw-r--r--。1 ルート ルート 100 2月8日 17:01 192.168.1.118
b) ファイルまたはディレクトリを一括アップロードする (pscp.pssh コマンド) ローカル ファイル /mnt/test.file をリモート サーバーの /tmp ディレクトリに一括アップロードします。
[root@bastion-IDC ~]# pscp.pssh -l root -h hosts.txt /mnt/test.file /tmp/ [1] 16:18:05 [成功] 192.168.1.105 [2] 16:18:05 [成功] 192.168.1.109 [3] 16:18:05 [成功] 192.168.1.101 [4] 16:18:05 [成功] 192.168.1.118
ローカル ファイル /mnt/test.file、/mnt/aa.file、/mnt/bb.file をリモート サーバーの /tmp ディレクトリに一括アップロードします。
[root@bastion-IDC ~]# pscp.pssh -l root -h hosts.txt /mnt/test.file /mnt/aa.file /mnt/bb.file /tmp/ [1] 16:22:50 [成功] 192.168.1.109 [2] 16:22:50 [成功] 192.168.1.105 [3] 16:22:50 [成功] 192.168.1.118 [4] 16:22:50 [成功] 192.168.1.101
または:
[root@bastion-IDC ~]# pscp.pssh -l root -h hosts.txt /mnt/{test.file,aa.file,bb.file} /tmp/ [1] 16:23:44 [成功] 192.168.1.109 [2] 16:23:44 [成功] 192.168.1.105 [3] 16:23:44 [成功] 192.168.1.101 [4] 16:23:44 [成功] 192.168.1.118
ローカル ディレクトリ /mnt/zhong をリモート サーバーの /tmp ディレクトリに一括アップロードします (ディレクトリをアップロードするときに -r パラメータを追加する必要があります)。
[root@bastion-IDC ~]# pscp.pssh -l root -h hosts.txt -r /mnt/zhong /tmp/ [1] 16:19:36 [成功] 192.168.1.109 [2] 16:19:36 [成功] 192.168.1.105 [3] 16:19:36 [成功] 192.168.1.101 [4] 16:19:36 [成功] 192.168.1.118
ローカルディレクトリ /mnt/zhong、/mnt/aa、/mnt/vv をリモートサーバーの /tmp ディレクトリに一括アップロードします。
[root@bastion-IDC ~]# pscp.pssh -l root -h hosts.txt -r /mnt/zhong /mnt/aa /mnt/vv /tmp/ [1] 16:21:02 [成功] 192.168.1.105 [2] 16:21:02 [成功] 192.168.1.109 [3] 16:21:02 [成功] 192.168.1.101 [4] 16:21:02 [成功] 192.168.1.118
または:
[root@bastion-IDC ~]# pscp.pssh -l root -h hosts.txt -r /mnt/{zhong,aa,vv} /tmp/ [1] 16:22:00 [成功] 192.168.1.109 [2] 16:22:00 [成功] 192.168.1.105 [3] 16:22:00 [成功] 192.168.1.101 [4] 16:22:00 [成功] 192.168.1.118
c) ファイルまたはディレクトリを一括ダウンロードする (pslurp コマンド) サーバーからローカル コンピューターに特定のファイルを一括ダウンロードします。pssh はダウンロードしたファイルを保存するために、ファイル リスト内の IP アドレスにちなんで名付けられたディレクトリを作成するため、名前の重複を心配する必要はありません。
[root@bastion-IDC ~]# pslurp -l root -h hosts.txt /etc/hosts 。 [1] 16:32:01 [成功] 192.168.1.109 [2] 16:32:01 [成功] 192.168.1.105 [3] 16:32:01 [成功] 192.168.1.101 [4] 16:32:01 [成功] 192.168.1.118 [root@bastion-IDC ~]# ll 合計 123 drwxr-xr-x. 2 ルート ルート 4096 2月8日 16:32 192.168.1.101 drwxr-xr-x. 2 ルート ルート 4096 2月8日 16:32 192.168.1.105 drwxr-xr-x. 2 ルート ルート 4096 2月8日 16:32 192.168.1.109 drwxr-xr-x. 2 ルート ルート 4096 2月8日 16:32 192.168.1.118 [root@bastion-IDC ~]# ll 192.168.1.101 合計 4 -rw-r--r--。1 ルート ルート 224 2月 8 16:32 ホスト [root@bastion-IDC ~]# ll 192.168.1.109 合計 4 -rw-r--r--。1 ルート ルート 252 2月 8 16:32 ホスト [root@bastion-IDC ~]# ll 192.168.1.105 合計 4 -rw-r--r--。1 ルート ルート 252 2月 8 16:32 ホスト [root@bastion-IDC ~]# ll 192.168.1.118 合計 4 -rw-r--r--。1 ルート ルート 212 2月 8 16:32 ホスト
以下の点にも特に注意してください: 上記のバッチ ダウンロード操作は、ローカルの現在のディレクトリにのみダウンロードでき、コマンドで指定されたパスを続けることはできません。
[root@bastion-IDC ~]# pslurp -l root -h hosts.txt /etc/hosts /mnt/ [1] 16:34:14 [失敗] 192.168.1.109 エラーコード1で終了しました [2] 16:34:14 [失敗] 192.168.1.105 エラーコード1で終了しました [3] 16:34:14 [失敗] 192.168.1.101 エラーコード1で終了しました [4] 16:34:14 [失敗] 192.168.1.118 エラーコード1で終了しました
ローカルの /mnt ディレクトリにダウンロードする場合、正しい方法は、まず /mnt ディレクトリに切り替えてから、ダウンロード コマンドを実行することです (リスト ファイルはフル パスに従う必要があります)。
[root@bastion-IDC ~]# cd /mnt/ [root@bastion-IDC mnt]# pslurp -l root -h /root/hosts.txt /etc/hosts ./ [1] 16:34:34 [成功] 192.168.1.109 [2] 16:34:34 [成功] 192.168.1.105 [3] 16:34:34 [成功] 192.168.1.118 [4] 16:34:34 [成功] 192.168.1.101 [root@bastion-IDC mnt]# ll 合計 16 drwxr-xr-x. 2 ルート ルート 4096 2月8日 16:34 192.168.1.101 drwxr-xr-x. 2 ルート ルート 4096 2月8日 16:34 192.168.1.105 drwxr-xr-x. 2 ルート ルート 4096 2月8日 16:34 192.168.1.109 drwxr-xr-x. 2 ルート ルート 4096 2月8日 16:34 192.168.1.118
上記はファイルのバッチダウンロード用です。ディレクトリをバッチダウンロードしたい場合は、-r パラメータを追加するだけです。
[root@bastion-IDC mnt]# pslurp -l root -h /root/hosts.txt -r /home/ ./ [1] 16:39:05 [成功] 192.168.1.109 [2] 16:39:05 [成功] 192.168.1.105 [3] 16:39:05 [成功] 192.168.1.101 [4] 16:39:05 [成功] 192.168.1.118 [root@bastion-IDC mnt]# ll 192.168.1.101 合計 8 drwxr-xr-x. 6 ルート ルート 4096 2月8日 16:39 ホーム -rw-r--r--。1 ルート ルート 224 2月 8 16:38 ホスト [root@bastion-IDC mnt]# ll 192.168.1.* 192.168.1.101: 合計 8 drwxr-xr-x. 6 ルート ルート 4096 2月8日 16:39 ホーム -rw-r--r--。1 ルート ルート 224 2月 8 16:38 ホスト 192.168.1.105: 合計 8 drwxr-xr-x. 4 ルート ルート 4096 2月8日 16:39 ホーム -rw-r--r--。1 ルート ルート 252 2月 8 16:38 ホスト 192.168.1.109: 合計 8 drwxr-xr-x. 4 ルート ルート 4096 2月8日 16:39 ホーム -rw-r--r--。1 ルート ルート 252 2月 8 16:38 ホスト 192.168.1.118: 合計 8 drwxr-xr-x. 3 ルート ルート 4096 2月8日 16:39 ホーム -rw-r--r--。1 ルート ルート 212 2月 8 16:38 ホスト
d) バッチ同期(prsyncコマンド) ローカルの /mnt/test ディレクトリ内のファイルまたはディレクトリをリモート マシンの /mnt/test パスに同期します。
[root@bastion-IDC ~]# prsync -l root -h hosts.txt -r /mnt/test/ /mnt/test/ [1] 16:46:41 [成功] 192.168.1.109 [2] 16:46:41 [成功] 192.168.1.105 [3] 16:46:41 [成功] 192.168.1.118 [4] 16:46:41 [成功] 192.168.1.101
ローカルの /mnt/test ディレクトリ内のファイルまたはディレクトリをリモート マシンの /mnt パスに同期します。
[root@bastion-IDC ~]# prsync -l root -h hosts.txt -r /mnt/test/ /mnt/ [1] 16:47:40 [成功] 192.168.1.109 [2] 16:47:40 [成功] 192.168.1.105 [3] 16:47:45 [成功] 192.168.1.101 [4] 16:47:46 [成功] 192.168.1.118
知らせ: 上記のバッチ同期ディレクトリ操作は、ローカルマシンの対応するディレクトリデータをリモートマシンに同期することです。リモートマシンのディレクトリ内の冗長ファイルも保持されます(冗長ファイルは削除されません)。 同様に、バッチ同期ファイル操作の場合は、-r パラメータを削除します。 注意: ファイルを同期すると、実際には完全な上書きが行われ、リモート マシン上の対応するファイル内のすべてのファイルが置き換えられます。 次のように: ローカルの /mnt/test/file ファイルの内容をリモート サーバーの /mnt/test/file ファイルに同期します。
[root@bastion-IDC ~]# prsync -l root -h hosts.txt /mnt/test/file /mnt/test/file [1] 16:53:54 [成功] 192.168.1.109 [2] 16:53:54 [成功] 192.168.1.105 [3] 16:53:54 [成功] 192.168.1.101 [4] 16:53:54 [成功] 192.168.1.118 [root@bastion-IDC ~]# prsync -l root -h hosts.txt /mnt/test/file /mnt/aaa [1] 16:54:03 [成功] 192.168.1.109 [2] 16:54:03 [成功] 192.168.1.105 [3] 16:54:03 [成功] 192.168.1.101 [4] 16:54:04 [成功] 192.168.1.118
e) リモートマシン上のプロセスを一括で強制終了する (pnuke コマンド) たとえば、リモートマシン上のnginxプロセスをバッチで強制終了する
[root@bastion-IDC ~]# pnuke -h hosts.txt -l root nginx [1] 17:09:14 [成功] 192.168.1.109 [2] 17:09:14 [成功] 192.168.1.105 [3] 17:09:15 [成功] 192.168.1.118 [4] 17:09:15 [成功] 192.168.1.101
以下もご興味があるかもしれません:- リモートサーバーにアクセスするためのSSHエイリアス設定
- Windows で winscp とバッチ処理を使用して、SSH ポート経由で Linux サーバーにファイルをアップロードする
- Python の Paramiko モジュールは、Linux サーバーにログインするための SSH 接続を実装します。
- SSH経由でLinuxサーバーにファイルやフォルダをアップロードする方法
- WindowsにOpenSSHをインストールし、SSHキーを生成してLinuxサーバーにログインします。
- Linux サーバーで安全な SSH アクセスを構成するための 4 つのヒント
- Linux VPS とサーバーのより安全な設定 Putty SSH でキーログインを使用する
- LinuxサーバのSSHクラッキング防止方法(推奨)
- Linux で SSH サーバー エイリアスを作成する 2 つの方法
|