認証が間違っているため、X11 接続が拒否されました

認証が間違っているため、X11 接続が拒否されました

まず私がやりたいこと:

経由でサーバーにログインしたいですssh。その後、経由でユーザーを変更しsudo su user、画面上で何らかのアプリケーションを起動します。

同僚の中には、

su user
export DISPLAY=<IP>:0

そしてそれは機能します。


経由でサーバーに接続しますssh -X user@server。次に、X11 アプリケーションを起動します。これは正常に動作します (ただし、警告は表示されます)。

警告:

libEGL warning: DRI3: failed to query the version
libEGL warning: DRI2: failed to authenticate
qt.qpa.xcb: QXcbConnection: XCB error: 1 (BadRequest), sequence: 414, resource id: 1897, major code: 155 (Unknown), minor code: 1

sudo su(またはsudo su user) を実行してプログラムを起動するか、経由で実行すると、sudo myprogramエラーが発生します。

エラー:

X11 connection rejected because of wrong authentication.
qt.qpa.xcb: could not connect to display localhost:11.0
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
    This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.

Aborted

この問題に関する記事をいくつか見つけました。

ユーザーを切り替えると X11 転送が失敗する

ssh接続。認証が間違っているためX11接続が拒否されました


ファイルを拡張し/etc/pam.d/su/etc/pam/sudoファイルを

session  optional  pam_xauth.so 

そして、後で/etc/ssh/sshd_config次の点を追加して変更しました:

X11Forwarding yes

そしてsshdを再起動するとsystemctl restart ssh.servicessh -Tx11forwarding yes

しかし何も変わりませんでした。

何をすべきか知っている人はいませんか? 変更を加えた後は、ユーザーのプログラム構成の変更を確認することが重要です。

答え1

多くの人が同じエラー メッセージを表示して、それが の使用とは無関係であることに気付かないのでsu、非常に異なる理由で同様の症状が発生していることを指摘したいと思います。

Snap でインストールされたものは動作しません。 とxeyesは動作するかもしれませんが、 Ubuntu でのまたは のxclock新規インストールは動作しません。chromium-browserfirefox

回避策は、export XAUTHORITY=$HOME/.Xauthorityリモート X11 アプリケーションを実行する前に、次の操作を実行するだけです。

答え2

不安オプション:

ログインしたホストで、

xhost +

あるいは、少しだけ安全

xhost <IP you want to log in to>

これにより、リモート ホストからの接続が許可されます。

なぜこれが安全でないのでしょうか? そのホストのすべてのプログラムとユーザー (または、 を持つ任意のホストのすべてのプログラム/ユーザーxhost +) が画面にアクセスし、実行中のマシンのすべてのキー押下を読み取ることができるようになりますxhost

より安全なオプション:

X11 サーバーの認証キーをリモート マシンに追加します。

ローカル マシンで、必要な「マジック クッキー」をリストします。

# xauth list
hostname/unix:0  MIT-MAGIC-COOKIE-1  0123456789abcdef0123456789abcdef

リモート マシンで、ファイルにシークレットを追加します~/.Xauthority。これも最も簡単な方法ですxauth

# setenv DISPLAY <ORIGIN_IP>:0
# xauth add <ORIGIN_IP>:0 MIT-MAGIC-COOKIE-1 0123456789abcdef0123456789abcdef

これらのマシン間の X11 プロトコル データはまだ暗号化されていないため、攻撃を受けやすいことに注意してください。

答え3

user1 が元のユーザー (パスワードがわかっている) で、user2 がターゲット ユーザー (パスワードが不明) であると仮定すると、次のように動作します。

% ssh -Y user1@target-box
Password: xxxxxxxxxxxxx

user1@target-box% sudo -u user2 bash
Password: xxxxxxxxxxxxx

user2@target-box% cp  ~user1/.Xauthority  ~user2

user2@target-box% xterm &

これは、投稿で説明した正しい sshd 構成も前提としていることに注意してください。

関連情報