DISPLAY変数にホスト名/ IPを指定できるようにSSHをどのように設定しますか?

DISPLAY変数にホスト名/ IPを指定できるようにSSHをどのように設定しますか?

CentOS6で実行したい古いアプリケーションがあり、abc1やabc2など、いくつかのシステムを使用しています。

私はabc1にログインし、sshを介してabc2に接続されたアプリケーションを実行し、変数をDISPLAY新しいabc1:0.0ウィンドウを開こうとするプロセスを実行しました。しかし失敗します。cannot open display

ssh -X abc2orを実行するとssh -Y abc2問題なくxtermを開くことができますが、DISPLAY変数は次のように設定されます。localhost:10.0

abc1が正しく解析されることに注意してください(abc2でabc1をpingできます)。

アプリケーションをまったく変更できないため、アプリケーションDISPLAYが使用する変数を制御できません。ただし、abc1 と abc2 の設定を変更できます。私は孤立したネットワークにあり、セキュリティには興味がありません。

SSH設定に何かがあるか、abc1:0.0これが機能するように変更できる他のものはありますか?

答え1

ローカルにログインしている場合abc1は関係ないかもしれませんが、SSH X11転送を使用してワークステーションから接続している場合はabc1起動できます。ネストされたXサーバーabc1着信接続をキャプチャして、安全なabc1:0.0SSH X11トンネル内のワークステーションのローカルXサーバーに転送します。

RHEL / CentOS 6で必要なRPMパッケージは、またはxorg-x11-xserver-Xnestxorg-x11-xserver-Xephyr最新の実装であればパフォーマンスが向上します)。

オリジナル:

  • 通常のXサーバーをabc1TCP接続を受信しないデフォルトの状態にしてください。
  • ワークステーションでローカルXサーバーを実行する
  • ワークステーションでX11転送SSH接続を確立します。abc1
  • 適切なオプションを使用してバックグラウンドでリスニングを開始またはXnest許可します。Xephyrabc1abc1:0.0
  • アプリケーションを起動してください。

この質問に関する@roaimaのコメントをご覧ください。古いXアプリケーションを使用しても、アプリケーションにDISPLAY設定をハードコードすることは常に非常に面倒です。

DISPLAY変数は設定可能な場所に設定される可能性が高いです。たとえば、アプリケーションの実行に使用されるユーザーアカウントのログインスクリプトで指定できます。ただし、修正がアプリケーションの修正と見なされる場合は、推奨回避策を使用する必要があります。

答え2

何が起こったのか簡単な説明:

X転送を介してリモートsshコンピュータのXサーバーと同様に、リモートコンピュータ(abc2)にローカルXプロトコルソケットを作成し、SSHトンネルを介してX-rayプロトコルを元のコンピュータ(abc1)に転送します。ローカルソケットはで識別されますlocalhost:10.0

OTOH、abc1:0.0モニターは古いXネットワークプロトコルを使用し、abc1のXサーバーが正しいポートでリッスンすることを期待しています。この機能は非常に安全ではないため、最新のシステムではデフォルトで無効になっています。

したがって、状況に応じてabc2で実行されているアプリケーションがabc1で実行されているXサーバーを使用する必要がある場合、最も簡単な方法はこの-nolistenオプションを使用せずにabc1でXサーバーを起動することです。これを行うには、Xサーバーの起動方法(通常はxdm / gdm / kdm / lightdmなどのディスプレイマネージャによって)を見つけて起動呼び出しを変更する必要があります。

次のことは、アクセス制御を有効にすることです。隔離されたネットワークでは、xhost +すべての接続を使用して許可します。それ以外の場合は、xauth現在のMITマジッククッキーを使用して追加できます。詳細は、部分的には、Xサーバーがコンピュータに構成される方法によって異なります。

関連情報