「su」とエラー「誤った認証のためX11接続が拒否されました」


53

ルートとして、コマンドを実行するためにリモートホストに接続しています。「standarduser」のみが適切なidファイルと正しい.ssh / configを持っているため、最初にユーザーを切り替えます。

su standarduser -c 'ssh -x remotehost ./remotecommand'

コマンドは正常に動作しますが、「-x」(X11-Forwardingを無効にする)を使用し/etc/ssh/ssh_config、X11Forwardsを無効にしたにもかかわらず、エラーメッセージが表示されます。

X11 connection rejected because of wrong authentication.

「standarduser」としてログインしているときにエラーメッセージが表示されません。

コマンドをcronジョブファイルに統合したいので、これは非常に面倒です。エラーメッセージがルートの.XAuthファイルの誤った認証を指していることは理解していますが、X11経由で接続しようとさえしていません。

「ssh -x」がX11接続を無効にせず、エラーメッセージをスローしないのはなぜですか?

更新:メッセージは、画面内でログインしているときにのみ表示されます。ローカルマシン自体で(画面なしで)上記のコマンドを使用すると、エラーメッセージが表示されないため、cronでも問題ないはずです。

また-v、SSHからのステータス情報の前であっても、同じコマンドを開始し、驚くべきエラーメッセージが最初に表示されました。

root@localhost:~# su standarduser -c 'ssh -x remotehost ./remotecommand'
X11 connection rejected because of wrong authentication.
OpenSSH_6.2p2 Ubuntu-6ubuntu0.1, OpenSSL 1.0.1e 11 Feb 2013

これは問題自体に私を導きました、それはsshエラーメッセージを投げているものではありません、それはsu

root@localhost:~# su standarduser -c 'echo Hi'
X11 connection rejected because of wrong authentication.
Hi

なぜこのエラーが発生するのはなぜscreenですか?このエラーメッセージを無効にするにはどうすればよいですか?


コマンドを再度実行-vし、sshオプションに追加して、出力を質問に貼り付けます。
ジェニーD 14年

回答:


80

あなたのルートには、あなたの持っているX11 マジッククッキーが欠けているようです。これを修正する方法を次に示します。.Xauthoritystandarduser

ショートバージョン@bmaupinに感謝)

standarduser@localhost:~$ xauth list | grep unix`echo $DISPLAY | cut -c10-12` > /tmp/xauth
standarduser@localhost:~$ sudo su
root@localhost:~$ xauth add `cat /tmp/xauth`

注意:バックティックを確認してください!引用符で置き換えることはできません!sudo2番目のコマンドをさらに進めるには、インストールする必要があります!

オリジナルロングバージョン

物事を修正するには、最初にstandarduser使用するディスプレイ番号を検出します。

standarduser@localhost:~$ echo $DISPLAY
localhost:21.0

この場合、それは21.0です。次に、standarduserのCookieのリストを表示します。

standarduser@localhost:~$ xauth list
localhost/unix:1  MIT-MAGIC-COOKIE-1  51a3801fd7776704575752f09015c61d
localhost/unix:21  MIT-MAGIC-COOKIE-1  0ba2913f8d9df0ee9eda295cad7b104f
localhost/unix:22  MIT-MAGIC-COOKIE-1  22ba6595c270f20f6315c53e27958dfe
localhost/unix:20  MIT-MAGIC-COOKIE-1  267f68b51726a8a381cfc10c91783a13

21.0表示用のCookie は、リストの2番目であり、で終わり104fます。

最後に行うことは、この特定のCookieをルートのに追加することです.Xauthority。rootとしてログインし、次を実行します。

root@localhost:~$ xauth add localhost/unix:21  MIT-MAGIC-COOKIE-1  0ba2913f8d9df0ee9eda295cad7b104f

これは、Bashスクリプトまたはで別のユーザーとしてX11 connection rejected because of wrong authentication実行suした場合のエラーを軽減する方法ですscreen

インスピレーションをくれたこの男に感謝します。


面白い。私はそれを試しましたが、それは私にとってもうまくいきませんでした。私の特定のケースでは、ほとんどすべて(別のxterm、VirtualBox)を起動できますが、geditを起動できません(同じエラーが表示されます)。ただし、rootに変更すると、geditを起動できます。私は手紙の指示に従いましたが、何もしませんでした。他の何かが間違っている必要があります。
luis.espinal 14年

@ luis.espinalは、誰かがあなたの特定の問題の解決策を提案することを望みます。
TranslucentCloud 14年

1
ロングバージョンは、魔法のように働いたが、ショートバージョンが、「XAUTH:(ARGV):1:悪い『とCentOSの上でエラーが発生した』コマンドライン」を追加
サム・

1
ショートバージョンは、centos 7
tdc

1
Ubuntu 18.04.1では、ショートバージョンは正常に動作します。
シマキスパナギオティス

38

より簡単な解決策:

1.- ssh user@host

2.- $ sudo su

3.- # xauth merge /home/user/.Xauthority

それで全部です

もちろん$DISPLAY変数を設定する必要があります。


1
これは有望ですが、少し不完全に聞こえます。$DISPLAY変数を正確に設定する方法に関する情報を追加しますか?この小さな追加があなたの答えにさらなる声をかけると思います。
TranslucentCloud

これは私にとってはうまくいきましたが、@ TranslucentCloudの答えはうまくいきませんでした。コマンドラインFYIからAndroid SDKマネージャーをルートとして実行しようとしたときに、最初に問題が発生しました。
スコッティセウス

2
以来、これはすぐに動作しませんxauth: file /root/.Xauthority does not exist
でした

2
tdc、それは単なる警告であり、エラーではありません。xauthはファイルを作成します-コマンドを2回実行した場合、ファイルは表示されません。
ウラジミールパンテレエフ16年

1
コピーして貼り付けるだけで、誰もが何かを学ぶ必要があります!ありがとう!ずっと簡単。
サイレン

7

私のニーズはわずかに異なっていたので、わずかに異なる解決策を思いつきました。X11アプリを別のユーザー(rootではない)として実行する機能が必要でした。CentOSを実行しているので、ubuntuの幸運な犬がXauthマジックを実行する甘いgksudoツールはありません。

ログインして、ユーザーを切り替えてアプリを実行するためだけに、カスタムスクリプトを作成したくありませんでした。それは私には少し不必要に思えます。

第一歩:

$ XAUTHORITYをsudoセッションで実行できるようにします。

/ etc / sudoersの残りのenv_keepステートメントの下に次の行を追加します。

Defaults    env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY"

ステップ2:

ターゲットユーザーが.Xauthorityを読み取ることができるようにします(そうですね、セキュリティを叫びます!あなたが望むすべて)。rootとしてコマンドを実行する機能だけが必要な場合は、これをスキップできます。

ターゲットユーザーは私と同じグループを共有するため、グループの読み取り権限をオンにします。

$ chmod g+r user ~/.Xauthority

ステップ3:

CentOSはデフォルトで$ XAUTHORITYの値を設定しません。プロファイルに行を追加します(私の場合は〜/ .bash_profileです):

export XAUTHORITY=$HOME/.Xauthority

それでおしまい。これ以上の調整は不要です。PolicyKitを機能させるための.XMLの記述はありません。ログインごとに実行するスクリプトはありません。xauthをコピーするために2回sudoする必要はありません。ここからは、次のことが簡単にできます。

$ sudo -u user xcalc

MobaXTermに最適です。


これは、CentOS 7でVMコンソールを取得するときに抱えていた問題を解決するために必要なものでした。実際には、目的のためにステップ3を実行するだけでしたssh / sshd_config)。ありがとう。
darklion

驚くばかり!これが答えです!ありがとう@Wスミス
tmow

1

ターゲットユーザーに完全に切り替える必要があります。つまり-susu - standarduser ...)で" "を使用します。そうでない場合、ルートのXが環境内でドラッグされます。


0

ルートスカッシュネットワークファイル共有に頻繁にルートするため、上記の解決策はどれも役に立ちませんでした。(xubuntu 14.04)。私のシステムで動作する次のスクリプトを作成しました。それはあなたのもので動作するかもしれません。もう一度、そうではないかもしれませんが、試してみてください...

仮定は、-Yオプションを使用してsshしたことです。

#!/bin/bash  
if [[ $DISPLAY =~ localhost(:[[:digit:]]+) ]] ;then
    port=${BASH_REMATCH[1]}
else
    echo "Unexpected DISPLAY $DISPLAY"
    exit 1
fi
h=$(hostname)
cookie=$(xauth list|grep $h.*$port)
sudo -i xauth -i add $cookie
sudo -i $*

cookie=$(xauth list|grep $h.*$port)$ portがCookie値の一部である場合、行は意図したものよりも多く一致する可能性があります。より安全です:cookie=$(xauth list) cookie=${c%% *}またはcookie=$(xauth list |grep $h[^ ]*$port)
ペパ

0

私の場合、そのエラーが発生したとき、暗号化されたユーザーディレクトリがありました。を呼び出した後ecrypt-mount-private、エラーを取り除き、X11転送を続行することができました。

ホームフォルダーが暗号化されているかどうかを確認するには、これを試してください(この回答に従って)ls -A /home.ecryptfsフォルダーが表示される場合、ホームディレクトリはおそらく暗号化されています。その場合は、回答の冒頭に記載したコマンドを実行してみてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.