web-dev-qa-db-ja.com

PowerShellの「1対多」リモーティングに相当するLinux

Windows管理から来て、私はLinux(Debian)をより深く掘り下げたいと思っています。 Webの検索に答えることができなかった(見つからなかった)非常に難しい質問の1つは、PowerShell for Windowsのように、いわゆる "1対多"リモート処理を実現するにはどうすればよいですか?

基本に分解すると、次のようになります。

Linuxに対する私の見解:

  • サーバーにsshしてコマンドを入力できます
  • 結果が出ました。 10台のサーバーの環境では、それぞれにコマンドを送信する(Perl/python?)スクリプトを記述する必要がありますか?

Windowsでの私の経験:

  1. コマンドを入力し、 "invoke-command"を使用して、これを多数のサーバー(おそらくテキストファイルから)に "送信"して、同時に実行し、結果を(今後の作業用のオブジェクトとして)取得します。

  2. 複数のセッションを確立することもでき、接続はバックグラウンドで保持され、必要に応じてこれらのセッションにコマンドを選択的に送信したり、リモートでリモートからリモートに送信したりできます。

(シェフや人形など聞いたことがありますか?)


Update 2019:
たくさん試した後-私はRexを提案します( this下記のコメント )-簡単なセットアップ(効果的にはsshが必要で、それ以外は必要ありません)と使用(少しだけ知っている場合Perlでもより良いですが、それはオプションです)
Rex(ify) を使用すると、adhocコマンドを実行して、実際の構成管理に進みます(...つまり、最初にCMですが、ニースアドホックタスクの場合も)Webサイトは古くなっていますが、現在(2019年1月1日現在)活発に開発されており、IRCチャネルもアクティブです。

Windowsの新しい openssh を使用すると、さらに多くの可能性があります

あなたが試すことができます: rex -u user -p password -H 192.168.1.3 -e 'say run "hostname"'

38
eli

概要

  • Ansibleは、PowerShellの強力な代替となるDevOpsツールです。
  • グラフィカルインターフェイスとしてのRunDeckは便利です
  • 一部の人々はRunDeck + Ansibleを一緒に実行します

clusterssh

複数のサーバーにリモートコマンドを送信する場合、初心者には clusterssh をお勧めします

Debianにclustersshをインストールするには:

apt-get install clusterssh

別の clustersshチュートリアル

ClusterSSHは、XTermやSSHなどの標準LinuxツールのTk/Perlラッパーです。そのため、ライブラリが存在するほぼすべてのPOSIX準拠OSで実行できます。Linux、Solaris、およびMac OS Xで実行しました。PerlライブラリTk(DebianまたはUbuntuではPerl-tk)が必要です。 xtermおよびOpenSSHに加えて、X11 :: Protocol(DebianまたはUbuntuのlibx11-protocol-Perl)。

アンシブル

複数のシステムを管理するためのリモートフレームワークについては、 Ansible はPuppetの非常に興味深い代替手段です。 SSHを介して機能するため、よりリーンであり、専用のリモートエージェントを必要としません(RedHatでも購入されています)。

ハンドブックは、コマンドラインオプションよりも複雑です。

ただし、Ansibleの使用を開始するには、簡単なインストールとクライアントリストテキストファイルのセットアップが必要です。

その後、すべてのサーバーでコマンドを実行するには、次のように簡単です。

ansible all -m command -a "uptime"

また、出力は非常に適切にフォーマットされ、ルール/サーバーごとに分離されており、バックグラウンドで実行中にファイルにリダイレクトして後で参照できます。

単純なルールから始めることができます。Linuxで成長するにつれて、Ansibleの使用法がより面白くなり、インフラストラクチャが大きくなります。そのため、PowerShellよりもはるかに多くのことができます。

例として、私が書いたLinuxサーバーをアップグレードするための非常にシンプルなPlaybook:

---
- hosts: all
  become: yes
  gather_facts: False
  tasks:
   - name: updates a server
     apt: update_cache=yes
   - name: upgrade a server
     apt: upgrade=full

また、包括的なポリシーを簡単に作成できる多くのモジュールが定義されています。

モジュールインデックス-Ansibleドキュメント

また、コミュニティによってすでに作成された安全なポリシーを検索するための、興味深い公式のハブ/「ソーシャル」リポジトリネットワークがあります。 Ansible Galaxy

Ansibleも広く使用されており、githubには、このような FreeRadius setup のプロジェクトがたくさんあります。

Ansibleは無料のオープンソースフレームワークですが、有料のWebパネルインターフェイス Ansible Tower も含まれていますが、ライセンスはかなり高価です。

最近、RedHatがそれを購入した後、towerには [〜#〜] awx [〜#〜] と呼ばれるオープンソースバージョンもあります。

おまけとして、AnsibleはWindowsサーバーを管理することもできます。

また、ネットワーク機器(ルーター、スイッチ、ファイアウォール)を管理することもできるため、自動化ターンキーソリューションとして非常に興味深いソリューションとなっています。

Ansibleのインストール方法

ランデッキ

繰り返しになりますが、リモートフレームワークは使いやすく、Ansibleほど強力ではないので、 Rundeck をお勧めします。

これは非常に強力なマルチユーザー/ログイングラフィカルインターフェイスであり、一般的な日常的なタスクの多くを自動化でき、sysopsまたはヘルプデスクの人々に詳細なビューを提供することもできます。

コマンドを実行すると、サーバー/タスクごとに出力が分解されたウィンドウも表示されます。

複数のジョブをバックグラウンドでシームレスに実行でき、後でレポートや出力を確認できます。

rundeck image

RunDeckのインストール方法

WebインターフェイスとしてAnsible + RunDeckを実行している人がいることに注意してください。すべてのケースがそれに当てはまるわけではありません。

言うまでもなく、AnsibleやRunDeckの使用は、インフラストラクチャドキュメントのフォームまたは一部として解釈でき、時間の経過とともに、アクション/レシピ/プレイブックを複製して改善することができます。

最後に、中央のコマンドサーバーについて説明しますが、タスク専用のサーバーを作成します。実際、専門用語はジャンプボックスです。 'ジャンプボックス'を設定すると、セキュリティが向上します

50
Rui F Ribeiro

対話的に実行したい場合は、terminatorを使用して、コマンドを複数の端末にブロードキャストできます。

enter image description here

参照: 同じLinuxコマンドを複数のタブ/シェルで同時に実行するにはどうすればよいですか?

24
jlliagre

pssh(またはparallel-ssh)。これは、ホストのリストに接続し、すべてのホストでコマンドを並行して実行するSSHクライアントです。

$ parallel-ssh -i -H "Host1 Host2" uname -a
[1] 11:37:12 [SUCCESS] Host2
Linux Host2 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[2] 11:37:12 [SUCCESS] Host1
Linux Host1 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
12
morxa

おそらく、単純なzsh(bash)関数で目標を達成できます。サーバーl61 l62 l63があり、それらに対してコマンドを実行する必要があることが多いとします。

function run_on_cluster()
{
    (for srv in l61 l62 l63;
    do
        echo "ssh $srv $1";
    done) | parallel --gnu
}

したがって、コマンドラインで:

$ run_on_cluster "uname -r"
2.6.32-279.el6.x86_64
2.6.32-279.el6.x86_64
2.6.32-504.23.4.el6.x86_64
11
user17530

KDEを使用している場合は、別の方法があります。
-Konsoleウィンドウを開きます。
通信するサーバーごとに:
-タブを開きます
-サーバーとのssh接続を確立します
[編集]メニューで、[すべてのタブ]に[入力のコピー]を選択します

そのタブで入力するすべてのコマンドは、すべてのサーバーにコピーされます。
タブを切り替えて、さまざまな結果を確認できます。

注:英語版のKDEを使用していないため、メニューラベル(引用符で囲まれている)が間違っている可能性があります

3
user161210

GNUパラレル

これにより、設定が保存されたシンプルなワンライナーが可能になるため、サーバーリストと一般的なスイッチを含むプロファイル「prod」を作成できます。次に、必要なコマンドを追加するだけで、準備が整います。また、ファイルをサーバーは、最後に自動的に削除し、さらに大きなスクリプトにとっては非常に便利です。

唯一の問題は、非常に多くのオプションがあることです;)しかし、ドキュメントには多くの例も含まれているため、最初にそれらを見るだけで済みます。

1
alkuzad

ここでも "Rex"について言及したいと思います。 https://www.rexify.org/

Perl+ssh(ユーザー/パスワードまたはキー認証)そしてすべての(?!)LinuxシステムにPerlがインストールされているため、使用する方が自然に思えます(Ansible&Coといくつかの類似点があります)。

複数のサーバーで一度にアドホックコマンドを実行できます(server1、server2、server ...-認証のセットアップ後、またはコマンドのSudo実行に-p/-uパラメーターと-s/-Sを使用します):

$ rex -H "server[1..3]" -e 'say run "uptime"'

または、さまざまな「タスク」を指定するファイルを作成し、そこから呼び出す

$ rex -f myConfigFile.rex uptime

リポジトリ経由で、またはperlcpan(またはcpanm Rexそして、初期設定は簡単です。以下を参照してください:
- https://www.rexify.org/ または
- https://www.rexify.org/docs/guides/start_using__r__ex.html および
- http://www.admin-magazine.com/Archive/2014/21/First-steps-in-IT-automation-by-Rex

1
eli