マシン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転送を便利かつ安全に行うにはどうすればよいですか?
@デミの答えは良いですが、私はそれを記入することは大きな助けになると思います。
リモート/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を実行していました。
ソケットと通信するときにTCPポートと通信するときにプロトコルX11が異なるのですか?
おそらく、独自のssh -R 6010:localhost:6000
の使用方法を組み合わせて、ポート転送を介してX11データを取り込み、tcpポートとX11ソケットリスナーの間にローカルギャブをncのようにブリッジすることができます。
nc -l -p 6000 > /tmp/.X11-unix/X0
Xephyrを使用して追加のXサーバーを起動します。これはセキュリティのためです。リモートシステムがセキュリティを侵害するのを防ぎます。
SSHを使用して、リモートソケットをXephyrソケットに転送します。 SSHはUnixソケットの転送もサポートしています。
リモートサーバーの環境変数を正しく設定します。