"잘못된 인증으로 인해 X11 연결이 거부되었습니다"오류와 함께 "su"


52

루트로서 명령을 실행하기 위해 원격 호스트에 연결하고 있습니다. "standarduser"만이 적절한 id 파일과 올바른 .ssh / config를 가지므로 먼저 사용자를 전환합니다.

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

명령은 제대로 작동하지만 "-x"(X11-Forwarding 비활성화)를 사용하고 X11Forwards를 비활성화 했음에도 불구하고 /etc/ssh/ssh_config여전히 오류 메시지가 나타납니다.

X11 connection rejected because of wrong authentication.

"standarduser"로 로그인했을 때 오류 메시지가 표시되지 않습니다.

cron 작업 파일에 명령을 통합하고 싶기 때문에 상당히 성가신 일입니다. 오류 메시지는 루트의 .XAuth 파일에 대한 잘못된 인증을 나타내는 것으로 이해하지만 X11을 통해 연결하지도 않습니다.

"ssh -x"가 X11 연결을 비활성화하지 않고 오류 메시지를 발생시키지 않는 이유는 무엇입니까?

업데이트 : 메시지는 화면 내에서 로그인 할 때만, 로컬 컴퓨터 자체에서 (화면없이) 위에서 언급 한 명령을 사용할 때 오류 메시지가 표시되지 않으므로 cron에서도 문제가 없습니다. .

또한 동일한 명령을 시작하고 -vSSH에서 상태 정보가 나오기 전에도 FIRST 오류 메시지가 나타납니다.

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합니까? 이 오류 메시지를 어떻게 비활성화 할 수 있습니까?


명령을 다시 실행하고 -vssh 옵션에 추가 한 후 출력을 질문에 붙여 넣으십시오.
Jenny D

답변:


79

루트가 일부 X11 부족한 것 같다 마법 쿠키 의를 .Xauthority당신이하는 standarduser있다. 이 문제를 해결하는 방법은 다음과 같습니다.

SHORT VERSION ( @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`

주의 : 백틱을 확인하십시오! 따옴표로 바꿀 수 없습니다! sudo두 번째 명령을 계속 진행 하려면 설치해야합니다!

원래 긴 버전

문제를 해결하려면 먼저 다음 중 어떤 디스플레이 번호를 standarduser사용 하는지 감지하십시오 .

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

이 경우에는입니다 21.0. 둘째, standarduser의 쿠키 목록을 표시 하십시오.

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표시 쿠키 는 목록에서 두 번째이며로 끝납니다 104f.

마지막으로 할 일은이 특정 쿠키를 루트에 추가하는 것입니다 .Xauthority. 루트로 로그인하여 다음을 수행하십시오.

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

Bash 스크립트 또는에서 다른 사용자로 X11 connection rejected because of wrong authentication실행할 때 오류를 완화 할 수있는 방법 입니다.suscreen

영감을 주신 이 사람 에게 감사합니다 .


흥미 롭군 나는 그것을 시도했지만 그것은 나에게도 효과가 없었다. 내 경우에는 거의 모든 것을 시작할 수 있지만 (다른 xterm, VirtualBox) gedit을 시작할 수는 없습니다 (같은 오류가 발생합니다). 그러나 루트로 변경하면 gedit을 시작할 수 있습니다. 나는 편지에 대한 지시를 따랐지만 아무것도하지 않았다. 다른 것이 잘못되어야합니다.
luis.espinal

@ luis.espinal 누군가가 특정 문제에 대한 해결책을 제안하기를 바랍니다.
TranslucentCloud

1
긴 버전은 매력처럼 작동했지만 짧은 버전은 "xauth : (argv) : 1 : bad"add "command line"과 함께 centos에서 오류가 발생했습니다
Sam

1
짧은 버전은 centos 7에서 나를 위해 일했다
tdc

1
Ubuntu 18.04.1에서 짧은 버전이 정상적으로 작동합니다.
Simakis Panagiotis

38

더 쉬운 해결책 :

1.- ssh user@host

2.- $ sudo su

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

그게 다야

물론 $DISPLAY변수를 설정해야합니다.


1
이것은 유망한 것으로 보이지만 약간 불완전합니다. $DISPLAY변수를 정확하게 설정하는 방법에 관한 정보를 추가 하시겠습니까 ? 이 작은 추가가 귀하의 답변에 다른 목소리를 낼 것이라고 믿습니다.
TranslucentCloud

@TranslucentCloud의 답변이 그렇지 않은 동안 이것은 나를 위해 일했습니다. 원래 명령 행 FYI에서 루트로 Android SDK 관리자를 실행하는 중에 문제점이 발생했습니다.
scottyseus

2
이 이후 나를 위해 상자 밖으로 작동하지 않았다xauth: file /root/.Xauthority does not exist
TDC

2
tdc, 오류 일뿐 아니라 경고 일뿐입니다. xauth는 파일을 생성합니다. 명령을 두 번째로 실행하면 보이지 않습니다.
블라디미르 판 텔레 예프

1
복사하여 붙여 넣기 만하면 무엇을 배워야하는 사람! 감사! 더 쉬운 방법입니다.
사이렌

7

내 요구는 약간 달랐으므로 약간 다른 해결책을 생각해 냈습니다. 루트가 아닌 다른 사용자로 X11 앱을 실행할 수있는 기능이 필요했습니다. CentOS를 실행하므로 우분투가있는 행운의 개가 Xauth 마술을하는 달콤한 gksudo 도구가 없습니다.

로그인, 사용자 전환 및 앱 실행을 위해 일부 사용자 지정 스크립트를 작성하고 싶지 않았습니다. 그것은 약간 불필요 해 보입니다.

1 단계 :

sudo 세션에서 $ XAUTHORITY를 전달할 수 있습니다.

/ etc / sudoers의 나머지 env_keep 문 아래에이 행을 추가하십시오.

Defaults    env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY"

2 단계 :

대상 사용자가 .Xauthority를 ​​읽을 수 있도록 허용하십시오 (예, SECURITY! 루트로 명령을 실행할 수있는 기능을 원하는 사람들은 생략 할 수 있습니다.

대상 사용자는 나와 같은 그룹을 공유하므로 그룹 읽기 권한을 설정하면됩니다.

$ chmod g+r user ~/.Xauthority

3 단계 :

CentOS는 기본적으로 $ XAUTHORITY 값을 채우지 않습니다. 프로필에 줄을 추가하십시오 (광산은 ~ / .bash_profile입니다).

export XAUTHORITY=$HOME/.Xauthority

그게 다야. 더 이상 조정하지 않습니다. PolicyKit이 작동하도록 .XML을 작성하지 마십시오. 각 로그인마다 실행중인 스크립트가 없습니다. xauth를 복사하기 위해 두 번 sudo 할 필요가 없습니다. 여기서부터 간단하게 다음을 수행 할 수 있습니다.

$ sudo -u user xcalc

MobaXTerm과 잘 작동합니다.


이것은 CentOS 7에서 VM 콘솔을 얻는 데있어 발생하는 문제를 해결하는 데 필요한 것입니다. 실제로 실제로 3 단계 만 수행하면됩니다 (물론 / etc /에서 X11Forwarding이 yes로 설정되어 있는지 확인하십시오) ssh / sshd_config). 감사.
darklion

대박! 이것이 답입니다! 감사합니다 @W Smith
tmow

1

대상 사용자로 완전히 전환해야합니다 (예 : " -"with su( su - standarduser ...)). 그렇지 않으면 루트의 X 항목이 환경에서 드래그됩니다.


0

나는 자주 root-squashed 네트워크 파일 공유에서 루트하기 때문에 위의 솔루션 중 어느 것도 나를 위해 일하지 않았다. (xubuntu 14.04). 시스템에서 작동하는 다음 스크립트를 작성했습니다. 그것은 당신에게 효과가있을 수 있습니다. 다시 말하지만, 그렇지 않을 수도 있지만 무료로 시도해보십시오 ...

-Y 옵션을 사용하여 가정했습니다.

#!/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=$(xauth list) cookie=${c%% *}또는 cookie=$(xauth list |grep $h[^ ]*$port).
PePa

0

제 경우에는 그 오류가 발생했을 때 암호화 된 사용자 디렉토리가있었습니다. 을 호출 한 후 ecrypt-mount-private오류를 제거하고 X11 전달을 계속할 수있었습니다.

홈 폴더가 암호화되어 있는지 확인하려면 다음과 같이 시도하십시오 ( 이 답변에 따라 ) ls -A /home. .ecryptfs폴더가 표시되면 홈 디렉토리가 암호화 된 것 같습니다.이 경우 응답 시작 부분에 입력 한 명령을 수행 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.