SSHログイン後すぐにホスト名変数を設定する

SSHログイン後すぐにホスト名変数を設定する

リモートホストに接続し、いくつかのデーモンプロセス(存在する場合はhadoop)を起動する一連の(サードパーティ)シェルスクリプトがあります。このスクリプトは、pidフォルダ、データディレクトリなどを構成するためにホスト名に大きく依存します。

今やるべきことは、Archを使用してスタンドアロンコンピュータでテスト/開発環境を作成することです。これは次のことを意味します。

  • 127.0.0.1でdata1、data2、data3などのエイリアスを提供するように/ etc / hostsを設定します(これはマイナーな部分です)。
  • localhostへのパスワードなしのSSHアクセスの設定(これも簡単です)
  • どういうわけか「ssh data1」を使用して接続したように、現在のSSHセッションのホスト名を設定します。その後、ホスト名は「data1」でなければなりません。把握できません。

したがって、2つの問題を解決する必要があります。

  • 一部の環境変数またはリモートホストに似たものを渡して、リモートホスト上のすべてのスクリプトに表示されるようにするにはどうすればよいですか。
  • そのセッションのリモートホストにのみホスト名を設定する方法

そして、これはすべて同じコンピュータで行われます。

答え1

システムのホスト名は、一般的な使用のためにプログラム的に設定することはできず、これを効果的に変更できる環境変数もありません。

たとえば、変数が表示される場合がありますが、$HOSTNAMEこれは一般に便宜上のものであり、意味のある方法でシステムのホスト名を変更しません。

私があなたの場合は、私が選択した環境変数を選択してログイン時にユーザー環境の一部に設定し、システムホスト名の実際の環境変数で作業するのではなく、スクリプトでその変数下流を使用します。 。

ホスト名コマンド

次のコマンドを実行して、許容される方法でシステム名を変更できます。

$ sudo hostname <somename>

ただし、ホスト名はしばしば複数の場所に保存され、一部は起動時に一度だけ読み取られ、再び読み込まれないため、このアプローチは難しいかもしれません。

これを考えると、これは困難で長くて簡単な方法でシステムのホスト名を無視するために多くのハッキングとスラッシングが必要であることがわかりました。

このタスクを実行しようとしたときに発生する可能性があるいくつかの問題を示すこのガイドを残します。タイトルは次のとおりです。Linuxシステムのホスト名を変更する方法

答え2

個々のプロセスのホスト名を変更することはできませんが、可能名前空間を使用できます)HOSTNAME環境変数を変更できます。

クライアントからサーバーに環境変数を渡す方法については、およびAcceptEnv選択PermitUserEnvironmentを参照sshdしてください(詳細はマニュアルページを参照)。SendEnvsshsshd_config(5)ssh_config(5)

答え3

SSHは通常、安全でシステムに依存しないと見なされるいくつかの環境変数、つまりロケールに依存する環境変数を渡すように設定されています。LC_*したがって、多くのインストールでは、次の変数を設定して環境を介してデータを渡すことができます。LC_DESIRED_HOSTNAMEサーバーが渡すことができる環境変数は、次のAcceptEnv設定によって決まります。sshd_configSendEnv、クライアントが渡しようとする環境変数は、次の設定によって決まります。~/.ssh/config

hostname引数を root としてコマンドを呼び出すと、次の再起動まですべてのプロセスのホスト名を設定できます。

Linux で実行すると、そのunshare -u someprogram子孫someprogramは別のプロセスで実行されます。名前空間独自のホスト名があります。名前空間内のホスト名は、システムの残りの部分と同じで始まりますが、独立して変更することができます。カーネルバージョンが3.8以上でない場合は、rootとしてこれを行う必要があります。

unshare -u -- sh -c 'hostname "$LC_HOSTNAME"; service hadoop start'

関連情報