サーバーで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 list
Xセッションでコマンドを実行してSERVERからCookie値を取得できます。
export DISPLAY=:20
TCP転送を設定し、Cookie値を設定したら、アプリケーションを設定して実行します。
答え2
サーバーにsshがあると仮定すると(つまり、サーバーはsshを介して出ることはできますが、接続できません)、サーバーからクライアントへのポート転送を実行できます。
SERVER$ ssh -L6000:127.0.0.1:6000 CLIENT.ip.or.name
6000
これにより、SSHトンネルを介してサーバーのローカルポートがlocalhostポートに転送されます6000
。