回答:
X11転送を有効にして2番目の接続を作成DISPLAY
し、最初の2番目の接続から環境変数を使用することもできます。
最初のウィンドウで:
$ ssh user@host
user@host$ ...
2番目のウィンドウで:
$ ssh -Y user@host 'echo $DISPLAY; while sleep 3600; do :; done'
localhost:10.0
最初のウィンドウに戻る:
user@host$ export DISPLAY=localhost:10.0
user@host$ xterm
残念ながら、ssh
開始したプロセス/セッションまたはリモートマシン上で実行するユーザーへのX11(またはその他の)転送を含めることは何もしません(たとえば、資格情報をチェックする/アウトするUnixソケットを使用する、または名前空間を使用する)。これらの転送は、リモートマシン上の誰でも接続できる単純なTCPリッスンソケットです。X11転送のすべてのセキュリティはX11認証に依存しています。
sshd_config(5)
manページには言及していること:
X11転送を無効にしても、ユーザーは常に独自のフォワーダーをインストールできるため、ユーザーがX11トラフィックを転送することを妨げません。
これを手動で行う方法を次に示します。
まず、x11認証メカニズムをバイパスするホストベースまたはユーザーベースのアクセス制御を必ず無効にしてください[1]:
$ xhost $(xhost | sed -n /:/s/^/-/p)
access control enabled, only authorized clients can connect
次にDISPLAY=:0
、ローカルマシンの認証情報を表示します。
$ xauth list :0
ohzd/unix:0 MIT-MAGIC-COOKIE-1 a86982ddce0c1e1c1a8c5e8b2846e43b
X11転送なしでリモートマシンに接続します。
$ ssh user@hzy64
user@hzy64's password:
[motd snipped]
経由~C
でコマンドラインを開き、ポート6000+43
からディスプレイに対応するUNIXソケットにリモート転送を追加します:0
。
hzy64$~C
ssh> -R 6043:/tmp/.X11-unix/X0
Forwarding port.
$DISPLAY
envvarを設定し、ローカルからリモートマシンに認証情報を追加します。
hzy64$ export DISPLAY=localhost:43
hzy64$ xauth add $DISPLAY . a86982ddce0c1e1c1a8c5e8b2846e43b
xauth: file /home/user/.Xauthority does not exist
これで準備完了です。
hzy64$ xterm
[1] バグ修正が誤っているため、Debianではデフォルトでユーザーベースのアクセス制御が有効になっています/etc/X11/Xsession.d/35x11-common_xhost-local
。さらに悪いことに、XWaylandでデフォルトで使用できるのは、これもオフにできないものだけです。X11プロトコルのプロキシ(例xscope
:)は、X11サーバーに大きな穴を開ける場合を除き、独自のx11認証Cookieチェック(sshの方法)を実行する必要があります。
-X
関心-Y
があるなら、に比べてわずかに優れているでしょう。
-X
、でのみ動作し-Y
ます。多くのシステム(例:debian)ではデフォルトでForwardX11Trusted
設定さyes
れて-X
おり、-Y
オプションとオプションは同等であるため、人々は気づきません;-)
change $DISPLAY to
ます。現在の質問のタイトルを検索結果に完全に表示することはできません。また、$ DISPLAYの変更は、実際には質問の一部ではなく回答の一部です。