簡単に説明します。WSL Ubuntu ディストリビューションをホストする Windows マシンで X サーバーを実行しています。ローカルとリモートの両方で GUI プログラムを起動できます。たとえば、ローカル WSL から起動することも、 SSH セッションのときにgvim
起動することもできます。gvim
WSLはリモートサーバーとの通信に適しており、X転送もうまく機能しています。しかし、次のようなエラーが引き続き発生します。追加テキストコマンドを実行するときssh -X user@machine_ip
。これはすべての GUI セッションが安全でないことを意味するのでしょうか?大きな潜在的な脅威を示唆するものでなければ、そのようなメッセージは受け入れることができます。
Warning: No xauth data; using fake authentication data for X11 forwarding.
次のインストーラーと構成手順を実行しましたが、最後の手順で失敗しました。
mv ~/.Xauthority ~/old.Xauthority
sudo apt install ssh xauth xorg -y
touch ~/.Xauthority
xauth generate $DISPLAY .
次のエラーメッセージが表示されます
xauth: (argv):1: couldn't query Security extension on display "localhost:0.0"
私は、3 台の Windows マシン (ラップトップ 2 台とデスクトップ 1 台) で上記の問題を再現しましたが、Warning: No xauth data;
4 台目のデスクトップ コンピューターで「 」というメッセージが表示されなくなりました。その後、次の内容を 4 台目のデスクトップ コンピューターから残りの 3 台のマシンにコピーしましたが、何も改善されませんでした。
- ファイルの内容
~/.Xauthority
、 - 以下を追加しました
/etc/ssh/config
:
ForwardAgent no
ForwardX11 no
ForwardX11Trusted yes
SendEnv LANG LC_*
HashKnownHosts yes
GSSAPIAuthentication yes
XauthLocation /usr/bin/xauth
- 以下を追加しました
~/.ssh/config
:
Host *
ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes
Protocol 2
GSSAPIDelegateCredentials no
XAuthLocation /usr/bin/xauth
xauth
最後に、 WSL (Ubuntu 18.04 LTS) を実行しているすべてのバグのある Windows マシン間でプログラムとの次の「会話」が継続して発生します。
User @ machine ➜ ~ xauth
Using authority file /home/llinfeng/.Xauthority
xauth> generate $DISPLAY
xauth: (stdin):2: unable to open display "$DISPLAY".
xauth> generate $DISPLAY .
xauth: (stdin):3: unable to open display "$DISPLAY".
xauth> add $DISPLAY .
xauth: (stdin):4: bad "add" command line
xauth>
のマニュアルを確認するとxauth
、add
どうやら有効なコマンドのようです。
3 つの WSL ディストリビューションを試しましたが、すべて同じ「No xauth data
」エラー メッセージが表示されました。Microsoft Store の 3 つのディストリビューションには、Ubuntu、Ubuntu 18.04 LTS、Pengwin (Debian) が含まれます。
xauth
適切な「xauth データ」を生成するコマンドを取得する方法を教えてください。
答え1
投稿とあなたの回答によると、このエラー メッセージを除いてすべて正常に動作しています。
メッセージには、「偽の認証データ」がリモート セッションに送信されていることが書かれているようです。そのデータを使用することでリモート攻撃者が利益を得るとは考えられないので、「xauth データなし」という警告を単に無視しても安全ではない理由がわかりません。
WSL は Linux の完全な実装ではありません。多くのシステム コールとライブラリが実装されていますが、実装されていないものもたくさんあります。
私の個人的な意見ですが、エラー メッセージは、誤って実装された機能や実装されていない機能から発生したものと考えて、無視しても問題ありません。
答え2
Windows には X サーバーがないため、動作させるには Xming などの X サーバーをインストールする必要があります。
ssh はリモート マシンの X サーバー要求を自分のマシンに転送するだけなので、リモート マシンに X サーバーがない場合はエラーが発生します。
Xmingをインストールした後、SSHではなくWSLシェルで次のコマンドを入力します。
export DISPLAY=:0
このコマンドは新しいターミナルを開くたびに実行する必要があります
追加することもできます~/.bashrc
動作しない場合は、xtermもインストールしてください。これにより、すべてのXライブラリがインストールされます。ubuntuの場合
sudo apt update;sudo apt install xterm
その後、xauthを通常通り使用できます
無効にすることもできますxauth +
-Y
X 転送を使用する場合は、ssh のフラグも使用する必要があります。
ssh -Y user@host
xming をインストールしたが動作しない場合は、DISPLAY 変数が設定されていることを確認してください。この変数は WSL でのみ設定する必要があり、xauth を使用できます。
export DISPLAY=:0
答え3
あなたの状況に関係があるかどうかはわかりませんが、次の理由で xauth コマンドに問題がありました:
- 私はdrvfsファイルシステムをマウントし、それをホームとして使用していました
- drvfs はリンク (ハードリンクまたはシンボリックリンク) をサポートしていません。
- xauthはリンクを使用しようとする
ちなみに、私は XAUTHORITY 環境変数を wsl ext4 ファイル システム内のパスに設定することでこの問題を回避しました。
.ICEauthority と ICEAUTHORITY 環境変数も同様です。(iceauth のマニュアル ページには ICEAUTHORITY 環境変数について記載されていませんが、動作するようです。)