質問

質問

SSH経由でホストに接続しようとすると、次のメッセージが表示されましたxauth

/usr/bin/xauth: ロック権限ファイル /home/sam/.Xauthority がタイムアウトしました。

メモ:SSH接続を介してリモートでX11 GUIを表示したいので、ファイルを正常に作成できるはずxauthです$HOME/.Xauthorityが、このメッセージに示すように明らかにそうではありません。

xeyesX11ベースのアプリケーションを実行すると、次のメッセージが表示されます。

$ xeyes
X11 connection rejected because of wrong authentication.
Error: Can't open display: localhost:10.0

この問題をどのように解決できますか?

答え1

strace失敗したリモートシステムで実行すると、xauth何が間違っているかが表示されますxauth

例えば

$ strace xauth list
stat("/home/sam/.Xauthority-c", {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
open("/home/sam/.Xauthority-c", O_WRONLY|O_CREAT|O_EXCL, 0600) = -1 EEXIST (File exists)
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({2, 0}, 0x7fff6c4430e0)       = 0
open("/home/sam/.Xauthority-c", O_WRONLY|O_CREAT|O_EXCL, 0600) = -1 EEXIST (File exists)
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({2, 0}, 0x7fff6c4430e0)       = 0
open("/home/sam/.Xauthority-c", O_WRONLY|O_CREAT|O_EXCL, 0600) = -1 EEXIST (File exists)
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0

xauthファイルを開こうとしていますが、そのファイルはすでに存在します。犯人ファイルはです/home/sam/.Xauthority-c。ファイルがリモートシステムに存在することを確認できます。

$ ls -l .Xauthority*
-rw------- 1 sam sam 55 Jul 12 22:04 .Xauthority
-rw------- 1 sam sam  0 Jul 12 22:36 .Xauthority-c
-rw------- 1 sam sam  0 Jul 12 22:36 .Xauthority-l

修理する

それが明らかに。これらのファイルはロックされたファイル.Xauthorityなので、削除すると問題が解決します。

$ rm -fr .Xauthority-*

ファイルを削除したら、SSH接続を終了して再接続してください。これにより、xauth成功した再実行が可能になります。

$ ssh -t skinner ssh sam@blackbird
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-44-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

Last login: Sun Jul 12 22:37:54 2015 from skinner.bubba.net
$

これxauth listで問題なくX11アプリケーションを実行できます。

$ xauth list
blackbird/unix:10  MIT-MAGIC-COOKIE-1  cf01f793d2a5ece0ea58196ab5a7977a

GUI

$ xeyes

                                              SS#1

問題を解決する代替方法

次のタイトルの記事を見ました。xauth:権限ファイル.Xauthorityのロック中にエラーが発生しました。 [linux, ssh, X11]xauth -bぶら下げ可能なロックされたファイルを破棄するために使用する方法について説明します。xauthマニュアルページはこれをサポートしているようです:

 -b      This option indicates that xauth should attempt to break any
         authority file locks before proceeding.  Use this option only to
         clean up stale locks.

引用する

答え2

問題の原因は、$ HOMEディレクトリに書き込み権限がないためです。

これが私が次のメッセージを受け取る理由です。

/usr/bin/xauth: ロック許可ファイル /home/fooftp/.Xauthority がタイムアウトしました。

権限を確認する方法は次のとおりです。

fooftp@for-fun-work:~> ls -l .Xauthority 
-rw-r--r-- 1 fooftp fooftp 1 Sep 14  2015 .Xauthority
# Conlusion: I can write this file: ok

fooftp@for-fun-work:~> rm .Xauthority
rm: cannot remove '.Xauthority': Permission denied
# Conlusion: strange ... I can't delete it 

fooftp@for-fun-work:~> id
uid=1001(fooftp) gid=1000(fooftp) groups=1000(fooftp)
# Conlusion: Yes, I am user fooftp

fooftp@for-fun-work:~> ls -ld .
dr-xr-xr-x 14 fooftp fooftp 4096 Sep 14  2015 .
# Conlusion: Bug found :-)
# The permissions should be "rwx" for you.

これが問題の場合は、$ HOMEへの書き込みアクセス権があることを確認する必要があります。

chmod u+rwX $HOME

答え3

これを理解するまで、私を悩ませる質問に対するもう一つの答えがあります。後で発見したように、この問題はFedora OSとその派生製品のバグでした。質問が承認された回答と一致しない場合、またはFedora、RedHat、Kororaなどを使用しない場合は役立ちません。

質問

ユーザーslmが言ったように、straceを実行すると問題が表示されますが、この特定のエラーでは出力が異なります。

$ strace xauth list
  ...
  stat64("/home/USER/.Xauthority-c", 0xbff23280) = -1 ENOENT (No such file or directory)
  open("/home/USER/.Xauthority-c", O_WRONLY|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied)
  rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
  rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
  rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
  nanosleep({2, 0}, 0xbff232c8)           = 0
  open("/home/USER/.Xauthority-c", O_WRONLY|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied)
  rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
  rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
  rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
  nanosleep({2, 0}, 0xbff232c8)           = 0
  open("/home/USER/.Xauthority-c", O_WRONLY|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied) 
  ...

明確に言えば、これは権限が拒否されたことを意味する EACCES 戻りコードを表します。これは、ファイルが存在したことを意味するEEXIST戻りコードであったユーザーslmの問題とは異なります。したがって、EACCES戻りコードの場合、最初に確認する必要があるのは、自分のホームディレクトリに書き込むために自分のホームディレクトリ権限が設定されていることです。まず、自分のユーザーホームディレクトリに書き込みフラグがあることを確認する必要があります。これにより、以下に説明するエラーの被害者になる可能性があります。

間違い

数回のGoogle検索の最後に、ついに同様の問題を抱えている人が見つかりました。読んでみたい人のために:https://bugzilla.redhat.com/show_bug.cgi?id=772992

解決策

この問題に対する解決策:

#verify you're not crazy
$ xauth list
  /usr/bin/xauth:  timeout in locking authority file /home/USER/.Xauthority
#use restorecon to reset it all
$ /sbin/restorecon -v -v /home/USER/.Xauthority 
$ /sbin/restorecon -v -v -R /home/USER/
#log out of the remote system
$ exit

SSH経由で再度ログインすると、この時点で問題はなく、Xセッションを再度正常に送信できます。


編集(およびその他の代替解決策):

できるだけ完璧にするために、他のユーザーはバグレポートで上記の修正が自分には効果がなかったと述べました。私には効果がありました。問題を解決するための別の試みは次のとおりです(この回避策を個人的に確認していません)。

# setsebool -P use_nfs_home_dirs 1

他の人がGDMについて言及したが、私はGDMについて全く知らない。これがあなたと関連している場合は、BugZillaから彼の投稿を読んで、彼の意見があなたにとって意味があるかどうかを確認することをお勧めします。

答え4

私には2つのステップがあります。

  1. 新しいユーザーが作成されました。新しいユーザーとしてログインし、fehのようなコマンドを使用してXを渡してみてください。
  2. 古いユーザーとして再度ログインし、古い ~/.Xauthority ファイルを新しいユーザーの ~/.Xauthority ファイルに置き換えます。

関連情報