サーバー構成で許可されていない場合は、SSH経由でX11を渡してください。

サーバー構成で許可されていない場合は、SSH経由でX11を渡してください。

状況を考えてみてください。 SSH経由でシステムAからシステムBにログインし、システムAにXセッションがあり、BでXプログラムを実行したいと思います。

ssh -X Bこの作業を透明にします。しかし、X11Forwarding yesサーバー構成が欠落していて、サーバーに対するroot権限もなく、サーバー管理者が無関心であればどうなりますか?

SSHトンネルを介して必要なものは何でもパイプできるため、X11接続を渡すことは明らかに可能です。実際、ローカルXサーバーがTCP接続を許可する場合は非常に簡単ですssh -R 6010:localhost:6000(ディスプレイの数に応じて調整されます)。ローカルXサーバーがソケット接続のみを許可する一般的なケースはどうですか?最小限の設置要件(特にB)で​​Xを簡単かつ安全に配信する方法は?

答え1

X11がソケットと通信するときとTCPポートで通信するときに使用するプロトコルは異なりますか?

ssh -R 6010:localhost:6000おそらく、ポート転送を介してX11データを取得し、ncを使用して、次のようにtcpポートとX11ソケットリスナー間のローカルgabを接続するための提案された使用方法を統合できます。

nc -l -p 6000 > /tmp/.X11-unix/X0

答え2

@Demiの答えは素晴らしいですが、書くことがたくさん役に立つと思います。

  • local - Xserver をサービスするローカルシステムです。
  • リモート – Xserverにデータを送信するアプリケーションを提供するリモートコンピュータ

静かな/etc/ssh/sshd_config

X11Forwarding no
X11DisplayOffset 10
X11UseLocalhost yes

リモコンが~/.Xauthority空か存在しません。

場所で:

Xephyr -ac -screen 1280x800 -br -reset   :2 &
DISPLAY=:2 ssh  -fR 6010:/tmp/.X11-unix/X2  user@remote "DISPLAY=:10 xeyes"

テストでは、Ubuntu 18.05はローカルで実行され、Debian Jesseはリモートで実行されました。

答え3

  1. Xepyrを使用して追加のXサーバーを起動します。これはセキュリティのためのものです。リモートシステムがシステムを損傷するのを防ぎます。

  2. SSHを使用してリモートソケットをXepyrソケットに渡します。 SSHはUnixソケット配信もサポートしています。

  3. リモートサーバーの環境変数を正しく設定してください。

関連情報