CentOS6で実行したい古いアプリケーションがあり、abc1やabc2など、いくつかのシステムを使用しています。
私はabc1にログインし、sshを介してabc2に接続されたアプリケーションを実行し、変数をDISPLAY
新しいabc1:0.0
ウィンドウを開こうとするプロセスを実行しました。しかし失敗します。cannot open display
ssh -X abc2
orを実行すると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.0
SSH X11トンネル内のワークステーションのローカルXサーバーに転送します。
RHEL / CentOS 6で必要なRPMパッケージは、またはxorg-x11-xserver-Xnest
(xorg-x11-xserver-Xephyr
最新の実装であればパフォーマンスが向上します)。
オリジナル:
- 通常のXサーバーを
abc1
TCP接続を受信しないデフォルトの状態にしてください。 - ワークステーションでローカルXサーバーを実行する
- ワークステーションでX11転送SSH接続を確立します。
abc1
- 適切なオプションを使用してバックグラウンドでリスニングを開始または
Xnest
許可します。Xephyr
abc1
abc1: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サーバーがコンピュータに構成される方法によって異なります。