질문

질문

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 검색 끝에 마침내 비슷한 문제를 가진 사람들을 찾았고, 그 결과 Fedora Bug Reports를 방문하게 되었습니다. 읽어보고 싶은 분들을 위해: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

나에게는 두 단계가 있습니다.

  1. 새로운 사용자가 생성되었습니다. 새로운 사용자로 로그인하고 feh와 같은 명령을 사용하여 X 전달을 시도해보세요.
  2. 이전 사용자로 다시 로그인하고 이전 ~/.Xauthority 파일을 새 사용자의 ~/.Xauthority 파일로 바꿉니다.

관련 정보