サーバーからのSSHなしのリバースX11転送

サーバーからのSSHなしのリバースX11転送

サーバーでX11プログラムを実行し、クライアントにウィンドウを表示したいです。

起動するサーバーにシェルがあります。 (これはSSHシェルではなく一部のクラスタコンピューティングソフトウェアです。)プログラムは何らかの形でこのシェルで実行する必要があります。

SSHを使用してクライアントに直接アクセスできますが、クライアントからサーバーにSSHに接続することはできません。

サーバーでプログラムを実行し、クライアントでウィンドウを開きたいです。どうすればいいですか?

答え1

逆トンネリング

AからBにSSHを送信できますが、BからAにSSHをしたいですか?一般的な解決策はリバースSSHトンネルの作成。サーバーから:

ssh -f -N -R 4222:localhost:22 CLIENT

これで、CLIENTからポート4222までSSH経由でサーバーにログインできるようになりました。接続でX11転送を有効にします。

ssh -p 4222 -X localhost

手動設定方法

あるいは、希望のディスプレイにX11転送を手動で設定することもできます。:20クライアントのディスプレイを:0サーバーのディスプレイに転送したい場合:

ssh -L 6020:localhost:6000 CLIENT

アプリケーションが正しく表示されたら、Xを介してのみ表示できます。承認する。これは「クッキー」(パスワードとして使用されるランダムに生成された値)の形を取ります。 Cookieの値を取得してコマンドを実行する必要がありますxauth add :20 MIT-MAGIC-COOKIE-1 …。よりリモートXモニターでウィンドウを開く(「モニターを開けません」理由)?。あなたの場合は、xauth listXセッションでコマンドを実行してSERVERからCookie値を取得できます。

export DISPLAY=:20TCP転送を設定し、Cookie値を設定したら、アプリケーションを設定して実行します。

答え2

サーバーにsshがあると仮定すると(つまり、サーバーはsshを介して出ることはできますが、接続できません)、サーバーからクライアントへのポート転送を実行できます。

SERVER$ ssh -L6000:127.0.0.1:6000 CLIENT.ip.or.name

6000これにより、SSHトンネルを介してサーバーのローカルポートがlocalhostポートに転送されます6000

関連情報