web-dev-qa-db-ja.com

サーバー構成で許可されていない場合、SSH経由でX11を転送する

マシンAからマシンBにSSHでログインしていて、マシンAでXセッションがあり、BでXプログラムを実行したい状況を考えてみましょう。

ssh -X Bはこれを透過的に機能させます。 しかし、サーバー構成にX11Forwarding yesがない場合、サーバーに対するroot権限がなく、サーバー管理者が無関心な場合はどうなりますか?

SSHチャネルを介して何でも転送できるため、X11接続を転送することは明らかに可能です。実際、ローカルXサーバーがTCP接続を許可している場合、ssh -R 6010:localhost:6000と同じくらい簡単です(表示数に合わせて調整します)。ローカルXサーバーが一般的な場合はどうでしょうか?ソケット接続のみを許可しますか?最小限のインストール要件(特にB)で​​X転送を便利かつ安全に行うにはどうすればよいですか?

@デミの答えは良いですが、私はそれを記入することは大きな助けになると思います。

  • local-Xserverを提供するローカルマシン。
  • remote-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を実行していました。

2
Craig Hicks

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

おそらく、独自のssh -R 6010:localhost:6000の使用方法を組み合わせて、ポート転送を介してX11データを取り込み、tcpポートとX11ソケットリスナーの間にローカルギャブをncのようにブリッジすることができます。

nc -l -p 6000 > /tmp/.X11-unix/X0
5
Caleb
  1. Xephyrを使用して追加のXサーバーを起動します。これはセキュリティのためです。リモートシステムがセキュリティを侵害するのを防ぎます。

  2. SSHを使用して、リモートソケットをXephyrソケットに転送します。 SSHはUnixソケットの転送もサポートしています。

  3. リモートサーバーの環境変数を正しく設定します。

2
Demi