web-dev-qa-db-ja.com

-Xなしでマシンにsshした後、$ DISPLAYを変更してssh -Xのように機能させることはできますか?

-Xなしでsshをマシンに追加した後、一部の設定($DISPLAYなど)を変更してssh -Xのように機能させることはできますか?そうでない場合、その理由は何ですか?ありがとう。

22
Tim

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認証に依存しています。

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が行う方法)を実行する必要があります。

35
mosvy