クラスタを管理する端末がリモートPCからノードに接続できますか?

クラスタを管理する端末がリモートPCからノードに接続できますか?

私のPCで複数のクラスタノードを管理する必要があります。問題は、クラスタノードがリモートPCからのみアクセスできることです。したがって、まずリモートPCにSSHを接続してから、リモートPCからクラスタノードに接続する必要があります。

ノードに直接アクセスできる場合は、Clustershなどを使用してすべてのノードを同時に管理します。

私の状況に合ったClustershのようなツールはありますか?

答え1

同様のタスクを実行するために、「クラスター画面」を一緒に編みました。/etc/clustersClustershと同じ方法でファイルを設定します。

cluster1 host1 host2
cluster2 host3 host4

次に、次のファイル/usr/local/bin/cs(cssh名を少し盗用したもの)があります。

#!/bin/bash

if [[ $# < 1 ]]
then
   echo -e "Usage : $0 cluster [command]";
   exit;
fi;

cluster=$(/bin/grep $1 /etc/clusters | sed -e 's/[^\ ]*\ //')

for s in $cluster; do
    if [ -n "$2" ]
    then
        exec screen -t "$s" $s "$2";
    else
        exec screen -t "$s" $s;
    fi
done;

だからあなたは実行することができます

screen
cs clustername "optional command"

Clustershほど良くはありませんが、作業を完了します。

答え2

sshいいえ、あるコンピュータに接続してから別のコンピュータに接続する必要はありません。古いssh顧客でさえ、これを行う必要はありません。

私は多くのリモートシステムに同じコマンドを入力することに興味がありませんが、あなたと同じような状況にあります。

ご質問の際、詳細は記載しておりませんのでコメントでお問い合わせいたします。それでは、いくつかの仮定をしましょう。私はあなたを仮定しますエリアボックスTmuxとssh(クライアント)をかなり新しいバージョンでインストールします。そうでない場合(たとえばWindowsの場合)、仮想マシンを使用してください。また、あなたの「リモートPC」を想定します。ジャンプホストsshまたインストールされ、接続することができます。~からあなたのローカルボックスは到着これクラスタノード順番に。クラスタノードにnode1転送します。node5それから他の2人がlocalboxいましたjumphost

さて、用語がなくなったので開いてください。これはssh_config(5)へのリンクです。以下が不明な場合は切り替えてください。

ホームフォルダでお気に入りのテキストエディタで開きますlocalbox。必要に応じて.ssh/configフォルダを作成します。~/.ssh次に、次のように入力します。

Host jumphost
    HostName the.name.of.your.jumphost.tld
    ForwardAgent yes # YMMV

Host node1 node 2 node3 node4 node5
    ProxyCommand ssh -W %h:%p jumphost

これはssh、接続する前に他のホストに接続して転送/プロキシする必要があることを示しています。node1node5jumphost

-W host:port 要求は、クライアントの標準入力および出力に対するセキュアチャネルを介してポートのホストに転送されます。-N、、、-TおよびExitOnForwardFailureを意味しますClearAllForwardings。プロトコルバージョン2にのみ適用されます。

ssh特に古いバージョン(jumphostつまり、サポートされていません-W)を使用している場合、しかし、netcat(nc)がインストールされている場合は、ProxyCommand次のものと交換できます。

ProxyCommand ssh user@proxy nc %h %p 2> /dev/null

上記の行がテキストファイルにある場合は、必要に応じて各クラスタノードの行を追加します。

Host node1 node1.cluster.domain.tld
    HostKeyAlias node1.cluster.domain.tld
    HostName 1.2.3.4 # you can give IPs

これは、名前がnode1公開されていないか、あなたに知られておらlocalboxず、見つからないと仮定します。しかし、IPは知られています。後で実際のホスト名にHostKeyAlias切り替えることができることを確認してください。また、最上位ドメインが変更されると、エイリアスをHostName $IP同様のものに減らす傾向があります。node1.cluster

したがって、node2パブリックDNSレコードがある可能性があります。

Host node2 node2.cluster.otherdomain.tld
    HostKeyAlias node2.cluster
    HostName node2.cluster.otherdomain.tld # ... or hostnames

これで、次のいずれかを使用できます(推奨)。

ssh node1
ssh node2

または(推奨されていません):

ssh node`.cluster.domain.tld
ssh node2.cluster.otherdomain.tld

次のノードに接続渡すこれjumphost。またjumphost、簡単に入力して接続することもできますssh jumphost

ここで理解する必要がある重要なことは、行に表示される名前はHostDNS名またはIPから完全に独立していることです。もしHostNameこの回線の回線が存在しますHost。 IIRCインデントは習慣ですが、必須ではありません。

これで、SSH側で解決すべき唯一のものは認証です。User代替ユーザー名を使用して接続するには、各「ブロック」に明示的にを指定できます。jumphostプロキシ転送を有効にするのに十分信頼できるかどうかを判断する必要があります。そうしないと、キーを生成してjumphostクラスタノードに通知する必要があります(から.ssh/authorized_keys)。他のものは、パスワードを頻繁に求めるメッセージを表示します。

これまでのすべての内容を要約しますが、どのユーザーがどこに接続するかを交互に検討します。

Host jumphost
    HostName the.name.of.your.jumphost.tld
    User joe

Host node1 node 2 node3 node4 node5
    ProxyCommand ssh -W %h:%p jumphost
    User joseph

Host node1 node1.cluster.domain.tld
    HostKeyAlias node1.cluster.domain.tld
    HostName 1.2.3.4 # you can give IPs
    User root

Host node2 node2.cluster.otherdomain.tld
    HostKeyAlias node2.cluster
    HostName node2.cluster.otherdomain.tld # ... or hostnames

...接続を転送するために接続されssh node1ます。そして では順方向接続で接続します。joe@jumphostroot@node1ssh node2joe@jumphostjoseph@node2

したがって、ホストごとに一部の構成ファイルセクションをオーバーライドできます。


SSH部分が完了したので、コマンドを並列に実行してみましょう。

clusterssh各xtermウィンドウがクラスタノードへのSSH接続を確立したら、複数のxtermウィンドウを調整できる必要があります。しかし、私は個人的にこれが面倒で直感的ではないと思います。

あなたには多くの選択肢があります。私が提案するものはすべてあなたのものですlocalbox

dsh(ダンサー/分散シェル)または皿(勤務/分散シェル)のいずれかとして使用できます。

pssh(parallel ssh)も別のオプションですが、Pythonに基づいているため、経験的に解析機能が制限される可能性.ssh/configがあります。

最後にお勧めしたいのはマルチプレクサあなたのため。 「Terminal Multiplexer」の略で、GNUと同じカテゴリに属するscreen​​がscreen

単一のTmuxウィンドウのウィンドウをCtrl+a SCtrl+a私が好むプレフィックスはどこですか)同期するショートカットがあります。

bind-key S set-window-option synchronize-panes \; display-message 'Toggled synchronize-panes'

これにより、Tmuxウィンドウ内の各ウィンドウでSSH接続を開き、入力をすべてのウィンドウに同期させることができます。これにより、Tmuxウィンドウ(ウィンドウはデフォルトでTmux用語のタブに似ています)のすべてのウィンドウにコマンドを入力し、を使用してすぐに実行できますEnter

ただし、これは少数のリモートノードでは正常に機能できますが、数が多い場合は扱いにくいことに注意してください。したがって、このプロセスのすべてが終わったら、私が推薦する他の解決策の1つを見てください。

関連情報