1つのインターフェイスを介して複数のSSHベースのサーバーを管理するためのClusterssh、psshなどの代替手段はありますか?
Clustersshの1つの弱点は、私のサーバーがログインにpasshpraseを使用した鍵ベースの認証を使用し、秘密鍵を使用してサーバーにログインする方法がないことです。
秘密鍵による認証をサポートする代替手段はありますか?
Rundeckをご覧ください- http://rundeck.org/
最初にタスクを定義します。
from fabric.api import *
@parallel
@hosts('192.168.3.118', '192.168.6.142')
def hostname():
run('hostname')
次に、fab
コマンドラインツールを使用して実行します。
$ fab -f /path/to/.py/file hostname
[192.168.3.118] Executing task 'hostname'
[192.168.6.142] Executing task 'hostname'
[192.168.6.142] run: hostname
[192.168.3.118] run: hostname
[192.168.6.142] out: SVR040-6142
[192.168.3.118] out: SVR040-3118.localdomain
Done.
独り占めして 構成管理システムPuppet または Chef のようにインストールできます。実際に管理しようとしているノードの数については言及していません。そのため、これはやり過ぎかもしれませんが、多くのマシンをこの方法で集中管理できます。あなたが今は小さいが成長している場合は、それより大きくなる前に、たとえばChefを設定することもできます。
特定のノードセットでアドホックコマンドを実行する必要がある場合は、knife ssh 'roles:webserver' 'hostname'
(ナイフはchefのコマンドラインツールです)は、webserverロールを持つすべてのノードに対してhostname
コマンドを実行します。
私は expect スクリプトを使用してログインを自動化し(特に、ジャンブボックスを通過してchrootに入力する必要があり、多数のパスワードを入力する必要があるため)、csshの構成にいくつかの「微調整」を行いました。したがって、「サーバー名/エイリアス」が指定されたbinフォルダーにこの「メインスクリプト」があり、必要なサーバーに、必要な場所に移動します。
〜/ .clusterssh/configで、スクリプトを指すように「ssh」パラメーターを設定しました。また、「ssh_args」もいくつかの無害な/偽の引数に設定する必要があります。これは、csshにデフォルトの引数リストがあるためです。デフォルトのリストは最終的にスクリプトになります。
そのため、スクリプト(各ウィンドウ/ターミナル)は、この引数とcsshに渡された引数の1つを受け取ります。スクリプトは、指定されたサーバーのファイルから回復し、資格情報セットと、そこに到達するために実行する必要がある手順を実行します。必要なのは、そのすべてのデータで「期待コード」を呼び出すことです。
〜/ .clusterssh/config
ssh=/home/user/bin/qs.sh
ssh_args=-a
qs.sh
#!/bin/bash
export PATH=~/bin:$PATH
shift
case $1 in
q4|q5|q6|q7|q8|q9)
essh user1@axt$1
### essh it's some little bash script that does the things I said before and in the end it launches the expect
;;
q1|q2|q3)
essh axtr@axt$1
;;
*)
echo "GOOH"
esac
だから私は通常、このようなものでそれを呼び出します
# cssh q4 q5 q6 q7
「qAll q4 q5 q6 q7」というクラスターを持つ「クラスターエイリアス」でも機能します。csshqAllで呼び出すことができます。
それが他の人を助けることを願っています。
多くのホストで同じコマンドを並列に実行するには、 shmux を使用します。
MCollective も確認する必要があります。これは、複数のサーバーとリアルタイムで対話するためのおそらく最も優れた、最も柔軟な方法です。正しく設定するのは少し手間がかかり、ニーズによっては少し上になるかもしれませんが、pssh、Clusterssh、および他のすべてのSSHベースのソリューションに勝るものは確かです。また、Rubyについて少し知っていれば、いったん配置したら、それを使ってできないことはおそらくありません。
ClustersshがMac OS XのX11またはXQuartzに依存していることに不愉快であり、その上、clustersshによって開かれたターミナルウィンドウがTerminal.appのものよりも醜く見えたので、私も同じ質問をしました。
それは私が彼のブログでJoerg Jaspertからのtmuxベースのスクリプトに偶然出会った方法です http://blog.ganneff.de/blog/2013/03/tmux---like-screen-just-nicer.html
基本的に、あなたは
tm ms Host1 user@Host2
そして、2つのペインで構成される1つのtmuxウィンドウでセッションを開きます
Bashプロンプトは単純なものに対して機能します。
servers.txtにサーバーのリストを作成します(サーバーごとに1行)。
次に行います:
$ while read $server; do ssh user@$server "command args"; done < servers.txt