5

問題: 分散型 CPU/GPU シミュレーター用のグラフィカル フロント エンドを開発しています。このシミュレーターは MPI を利用するため、ネットワーク上で使用されているすべてのコンピューターのホスト名を詳述するホストファイルが必要です。これにより、どのマシンに分散するかを認識できます。私のアプリケーションのエンド ユーザーはコンピューター サイエンティストではないため (また、コンピューターに詳しくない可能性もあります)、ネットワーク/クラスター上のすべてのコンピューターのホスト名を知っている/見つけられるとは期待できません。このホスト名の検出をプログラムで実行して、アプリケーションの起動時にユーザーが利用可能なマシンを確認し、それらから実行するホストを選択できるようにしたいと考えています。可能であれば、このソリューションをクロス プラットフォームにしたいと考えていますが、シミュレーターには現在 Linux の依存関係がいくつか含まれているため、Linux のみのソリューションで対処できます。

これまでに試したこと : nmap パッケージを利用してnmap -sP <ip address range>、そのローカル ネットワークの IP アドレス範囲を使用するなどのコマンドを使用して、ネットワーク上のホストを検出しようとしました。ただし、(ホスト名ではなく) ホストの IP アドレスのみをダンプし、これらの IP アドレスを ssh ホスト名に変換する方法がわかりません(MPI はホスト検出に ssh を使用するため)。さらに、ブロードキャスト アドレスを提供する ping で同様のアプローチを使用したところ、ほぼ同じ結果が返されました。

この質問の広範な性質と示されたコードの欠如をお詫びしますが、私はネットワークの調査/プログラミングの経験があまりなく、どこから始めればよいかさえわかりません. これをグーグルで検索してみましたが、適切なオプションを見つけることができませんでした (おそらく、経験不足で不適切な用語を使用して不適切な結果を引き起こした可能性があります)。 .

4

1 に答える 1

5

SSH は、接続先のホスト名または IP アドレスが指定されているかどうかを気にしません (ホスト固有の構成がある場合にこれが適用されるかどうかは不明です)。ほとんどの MPI 実装も気にしません。たとえば、Open MPI 接続の URI アドレスはすべて数値であるため、IP を含むホストファイルで問題ありません。一方、HTTPサーバーは、多くの異なるサイトが同じIPアドレスに解決される仮想ホスティングのことを考慮していますが、サーバーにはHostHTTPヘッダーを介して実際のホスト名が提供されます.

勝手なアドバイス: ping でホストを見つけることは問題ありませんが、SSH が実行されているマシンが見つかったことを保証するものではありません。TCP 接続を受け入れるポート 22 が開いているシステムをスキャンすることをお勧めします。

$ nmap -oX -sT -p22 <ip range>

-oX簡単に解析できる XML 出力を生成します。-oGまた、スキャン結果の自動解析に適した形式です。また、SSH を実行しているからといって、必ずしもユーザーがシステムにログインできるとは限りません。たとえば、ネットワーク ルーターや別のリモートで管理可能なデバイスである可能性があります。また、ユーザーがパスワード (RSA/DSA 公開鍵など) を入力しなくてもログオンできるマシンのみを表示するように注意する必要があります。そうしないと、MPI ジョブを開始するのが非常に面倒な作業になります。次のような方法で、見つかった各ホストをテストできます。

$ ssh -2 -o "PreferredAuthentications=gssapi-with-mic,hostbased,publickey" \
      <host> hostname

このコマンドは、基本的にすべての対話型認証方法を除外します。接続に成功すると、リモート マシンのホスト名が出力されます。そうしないと、SSH クライアントからパーミッション拒否エラーとゼロ以外の終了コードが返されます。

于 2013-04-01T09:25:54.743 に答える