-X
なしでssh
をマシンに追加した後、一部の設定($DISPLAY
など)を変更してssh -X
のように機能させることはできますか?そうでない場合、その理由は何ですか?ありがとう。
X11転送を有効にして2番目の接続を作成し、最初の2番目の接続からのDISPLAY
環境変数を使用することもできます。
最初のウィンドウで:
_$ 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)
のマンページには、次のように記載されています。
ユーザーはいつでも独自のフォワーダーをインストールできるため、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
_からディスプレイ_:0
_に対応するUNIXソケットにリモート転送を追加します。
_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]誤った bugfix が原因で、Debianでは_/etc/X11/Xsession.d/35x11-common_xhost-local
_を介してユーザーベースのアクセス制御がデフォルトでオンになっています。さらに悪いことに、これはXWaylandでデフォルトで使用できる唯一のものであり、これもオフにすることができません。 X11プロトコルのプロキシ(例:xscope
)を使用するプログラムは、X11サーバーにギャップホールを開けない限り、独自のx11認証Cookieチェック(sshが行う方法)を実行する必要があります。