ssh
機械なしで-X
いくつかの設定(例$DISPLAY
:)を変更してこのように動作させることはできますかssh -X
?そうでなければなぜですか?ありがとうございます。
答え1
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 認証に依存します。
X11手動配信
マンページには以下がsshd_config(5)
挙げられます。
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]
次のコマンドラインを開き、ポートからディスプレイに対応するUnixソケットへのリモート転送を~C
追加します。6000+43
:0
hzy64$~C
ssh> -R 6043:/tmp/.X11-unix/X0
Forwarding port.
環境変数を設定し$DISPLAY
、ローカルからリモートシステムに認証情報を追加します。
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と同様)を実行する必要があります。