SSH X11이 작동하지 않습니다


15

집과 직장 컴퓨터가 있고 집 컴퓨터에는 고정 IP 주소가 있습니다.

업무용 컴퓨터에서 가정용 컴퓨터로 ssh를 연결하면 ssh 연결은 작동하지만 X11 응용 프로그램은 표시되지 않습니다.

/etc/ssh/sshd_config집에서 :

X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

직장에서 다음 명령을 시도했습니다.

xhost + home HOME_IP
ssh -X home
ssh -X HOME_IP
ssh -Y home
ssh -Y HOME_IP

/etc/ssh/ssh_config직장에서 :

Host *
ForwardX11 yes 
ForwardX11Trusted yes

~/.ssh/config직장에서 :

Host home
HostName HOME_IP
User azat
PreferredAuthentications password
ForwardX11 yes

~/.Xauthority직장에서 :

-rw------- 1 azat azat 269 Jun  7 11:25 .Xauthority

~/.Xauthority집에서 :

-rw------- 1 azat azat 246 Jun  7 19:03 .Xauthority

하지만 작동하지 않습니다

집에 ssh 연결을 한 후 :

$ echo $DISPLAY
localhost:10.0

$ kate
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
kate: cannot connect to X server localhost:10.0

내가 사용하는 iptables가정에서,하지만 난 모든 I 필요가 있다고 읽은에 따르면 포트 (22)를 허용했습니다.

UPD. -vvv

...
debug2 : 콜백 시작
debug2 : x11_get_proto : / usr / bin / xauth list : 0 2> / dev / null
debug1 : 인증 스푸핑으로 X11 전달을 요청합니다.
debug2 : 채널 1 : 요청 x11- 요청 확인 1
debug2 : client_session2_setup : ID 1
debug2 : fd 3 설정 TCP_NODELAY
debug2 : 채널 1 : 요청 pty-req 확인 1
...

시작할 때 kate:

debug1 : client_input_channel_open : ctype x11 rchan 2 승리 65536 최대 16384
debug1 : client_request_x11 : 127.0.0.1의 요청 55486
debug2 : fd 8 설정 O_NONBLOCK
debug3 : fd 8은 O_NONBLOCK입니다.
debug1 : 채널 2 : 새로운 [x11]
debug1 : x11 확인
debug2 : X11 연결은 다른 인증 프로토콜을 사용합니다.
잘못된 인증으로 인해 X11 연결이 거부되었습니다.
debug2 : X11이 2 i0 / o0를 거부했습니다.
debug2 : 채널 2 : 읽기 실패
debug2 : 채널 2 : close_read
debug2 : 채널 2 : 입력 열기-> 드레인
debug2 : 채널 2 : 빈 부분
debug2 : 채널 2 : eof 보내기
debug2 : 채널 2 : 입력 드레인-> 닫힘
debug2 : 채널 2 : 쓰기 실패
debug2 : 채널 2 : close_write
debug2 : 채널 2 : 출력 열기-> 닫힘
debug2 : X11 닫힌 2 i3 / o3
debug2 : 채널 2 : 보내기 닫기
debug2 : 채널 2 : rcvd 닫기
debug2 : 채널 2 : 죽었습니다
debug2 : 채널 2 : 가비지 수집
debug1 : 채널 2 : 무료 : x11, nchannels 3
debug3 : 채널 2 : 상태 : 다음 연결이 열려 있습니다.
  # 1 클라이언트 세션 (t4 r0 i0 / 0 o0 / 0 fd 5/6 cc -1)
  # 2 x11 (t7 r2 i3 / 0 o3 / 0 fd 8/8 cc -1)

# 위와 동일하게 약 7 회 반복

kate : X 서버 localhost : 10.0에 연결할 수 없습니다

UPD2 Linux 배포 및 버전 번호를 제공하십시오.
X 또는 사용자 정의한 다른 항목에 기본 그놈 또는 KDE 환경을 사용하고 있습니까?

azat : ~ $ kded4-버전
수량 : 4.7.4
KDE 개발 플랫폼 : 4.6.5 (4.6.5)
KDE 데몬 : $ Id $

터미널 창에서 명령 행에서 ssh를 직접 호출하고 있습니까?
어떤 터미널을 사용하고 있습니까? xterm, gnome-terminal 또는?
X 환경에서 실행되는 터미널을 어떻게 시작 했습니까? 메뉴에서? 핫키? 또는?

터미널 에뮬레이터`yakuake`에서
수동으로`Ctrl + N`을 누르고 명령을 작성하십시오.

ssh -X가 실패한 동일한 터미널 창에서 xeye를 실행할 수 있습니까?

`xeyes`-설치되지 않았습니다
그러나`kate` 또는 다른 kde 앱이 실행 중입니다

X 세션에 로그인 한 동일한 사용자로 ssh 명령을 호출하고 있습니까?
From the same user

UPD3

또한 ssh소스 를 다운로드 하고 debug2()쓰기를 사용하여 버전이 다른 이유를보고합니다.
쿠키가 표시되고 그 중 하나가 비어 있습니다.MIT-MAGIC-COOKIE-1

답변:


21

ssh X 전달이 작동하지 않는 이유는 /etc/ssh/sshrc구성 파일 이 있기 때문 입니다.

sshd(8)매뉴얼 페이지 의 끝은 다음 과 같습니다.

경우 ~/.ssh/rc존재, 그것을 실행; 그렇지 않으면 /etc/ssh/sshrc실행합니다. 그렇지 않으면 xauth를 실행합니다

따라서 /etc/ssh/sshrc서버 측의 (sshd 매뉴얼 페이지에서도) 다음 명령을 추가합니다 .

if read proto cookie && [ -n "$DISPLAY" ]; then
        if [ `echo $DISPLAY | cut -c1-10` = 'localhost:' ]; then
                # X11UseLocalhost=yes
                echo add unix:`echo $DISPLAY |
                    cut -c11-` $proto $cookie
        else
                # X11UseLocalhost=no
                echo add $DISPLAY $proto $cookie
        fi | xauth -q -
fi

그리고 작동합니다!


당신은 클라이언트 또는 서버 측에서합니까?
alfonx

서버 측에서. (/ etc / ssh / sshrc는 클라이언트가 연결될 때 실행 됨)
azat

2

ssh에 문제가있을 때마다 가장 먼저해야 할 일은 -v다른 사람들이 검사 할 수있는 출력을 제공하는 옵션을 사용 하여 클라이언트를 실행하는 것입니다.

ssh -v user@somewhere

로컬 시스템에 문제가 있다고 생각합니다. ssh 명령을 어떻게 호출합니까? 쉘에서 수동으로 실행하고 있습니까? 아니면 스크립트의 일부로 실행됩니까? 두 경우 모두 로컬 시스템의 DISPLAY환경이 올바르게 설정되어 있는지 확인해야 합니다. 또한 원격 측에서도 올바르게 설정해야하지만 해당 값 원격 측과 로컬 측 이 다릅니다 .

작성한 내용에서 원격 호스트에서 올바르게 설정 된 것 같습니다 (확장하면 X11 전달이 ssh에 의해 올바르게 설정되고 있음). 원격 시스템에는 다음이 있습니다.

$ echo $DISPLAY
localhost:10.0

그 지역에서 무엇을 보여주는가? 쉘에서 X 응용 프로그램을 시작하는 것뿐만 아니라 값을 에코하여 쉘에 있는지 쉽게 확인할 수 있어야합니다. 물론 xeyes그러한 종류의 테스트에 항상 훌륭한 것을 사용할 수 있습니다 ! :)

반면, 스크립트에서 ssh 명령을 호출하거나 핫키에 첨부 된 경우 예상 환경을 상속하지 못할 수 있으므로 DISPLAY로컬 측의 환경 변수가 전혀 설정되지 않을 수 있습니다.

또한 .Xauthority파일을 다루는 것처럼 들리므로 파일을 완전히 삭제 한 다음 X 세션에서 로그 아웃했다가 다시 로그인하여 자동으로 다시 만들 수 있습니다. 와 뭉쳐야 할 필요는 거의 .Xauthority없으므로 도움이되지 않는 절박한 척도 일 것입니다.

로컬에서 볼 수있는 것은 :

$ echo $DISPLAY
:0.0

셸을 열면 시스템을 올바르게 구성하면 직접 설정하지 않아도되며, 셸을 시작한 환경에서 상속해야합니다. 그러나 환경 변수 상속을 올바르게 처리하지 못하는 창 관리자 / 핫키 구성을 보았습니다. Linux 시스템이 실행 중이 gnome-session거나 kde-session쉘 또는 스크립트를 시작하는 데 사용하는 경우 환경 변수 상속에 대한 Ubuntu 설명서에 설명 된대로 X 세션 환경 변수가 올바르게 설정되어야 합니다 .

예를 들어 터미널에서 "gedit"명령을 실행하고 "bash"(부모 프로세스)가 "gedit"(자식 프로세스)를 생성하는 경우와 같이 부모 프로세스가 자식 프로세스를 만들면 자식 프로세스는 모든 환경 변수를 상속합니다. 부모 프로세스가 가진 가치.

...

참고 : Gnome 그래픽 데스크탑 환경에서 gnome-session은 데스크탑에서 실행중인 모든 프로세스의 상위 프로세스입니다. 이 사실 (상속 원칙과 함께)은 환경 변수를 사용하여 데스크탑의 작동에 강력하게 영향을 미치는 능력의 핵심입니다. KDE의 동등한 프로세스는 kde-session입니다.

업데이트

의 결과를 게시 해 주셔서 감사합니다 ssh -vvv. 이 경우의 추가 상세 -vvv만 대이 -v도움이됩니다. 디버그 출력은 X11 포워딩이 올바르게 설정되었음을 알려줍니다.

debug2: x11_get_proto: /usr/bin/xauth  list :0 2>/dev/null
debug1: Requesting X11 forwarding with authentication spoofing.
debug2: channel 1: request x11-req confirm 1

그러나 :0첫 번째 줄에서 ssh를 호출하는 방식에 여전히 로컬 측에 구성 오류가 있다고 생각합니다. 많은 시스템에서 기본값 DISPLAY:0.0아닙니다 :0. DISPLAYssh 명령을 호출하기 전에 수동으로 직접 값을 설정하고 있습니까?

로컬 시스템 및 ssh 명령을 호출하는 방법에 대한 자세한 정보는이 시점에서 유용합니다.

  • Linux 배포 및 버전 번호를 제공하십시오.
  • X 또는 사용자 정의한 다른 항목에 기본 그놈 또는 KDE 환경을 사용하고 있습니까?
  • 터미널 창에서 명령 행에서 ssh를 직접 호출하고 있습니까?
  • 어떤 터미널을 사용하고 있습니까? xterm, gnome-terminal 또는?
  • X 환경에서 실행되는 터미널을 어떻게 시작 했습니까? 메뉴에서? 핫키? 또는?
  • 실패한 xeyes동일한 터미널 창에서 실행할 수 있습니까 ssh -X?
  • X 세션에 로그인 한 동일한 사용자로 ssh 명령을 호출하고 있습니까?

이 마지막 항목이 중요합니다. 다른 사용자로 ssh를 실행중인 경우 (예 : 사용자 터미널 창 대신 루트 터미널 창을 연 경우) DISPLAY=:0권한이 없어서 명시 적으로 설정하더라도이 문제가 발생 합니다. 기본적으로 다른 사용자 (루트도 포함)로 X 서버에 연결


질문 본문 업데이트
azat

추가 디버깅을 위해 더 많은 정보를 요청 하는 새로운 UPDATED 섹션을 추가했습니다.
aculich

나는 t set DISPLAY` 매뉴얼을하지 않습니다 . 사실 X -nolisten로컬 컴퓨터에서 작동하지 않는 이유를 이해한다고 생각합니다.
azat

-nolisten이 문제와 관련이 없습니다. X에 관한 한 원격 ssh 연결에 대해서는 아무것도 모릅니다. X에게는 다른 로컬 프로그램처럼 보입니다.
aculich

1
sshd서버쪽에 문제가있는 경우 추가 정보로 포 그라운드에서 시작할 수도 있습니다.
0xC0000022L

1

구성이 정상인 것 같지만 Agemen이 제안한대로 "ssh -X home"을 시도하십시오.

또한 다른 모든 방법이 실패하면 다음을 시도하십시오.

직장에서 가정용 컴퓨터로 ssh 한 후 "집"유형 :

xauth list

그런 다음 "작업"에 다음을 입력하십시오.

xauth

"xauth>"프롬프트가 나타납니다. 여기에서 "add"를 입력 한 다음 "xauth list"의 출력을 한 번에 한 줄씩 붙여 넣습니다 (각 줄 앞에 "add"가 붙습니다). 예를 들면 다음과 같습니다.

someguy@work:~$ xauth
Using authority file /var/run/gdm/auth-for-someguy-4MYV85/database
xauth> add work/unix:0  MIT-MAGIC-COOKIE-1  781cc753194fd55ecdf6c4cf105c40e3
xauth> 

알려주세요.


나는 이미 시도했다 ssh -X home(포스트 작성). xauth에 대하여 나는 내일 노력할 것이다.
azat

나는 시도 xauth list & xauth add하지만 여전히 작동하지 않습니다
azat

xauth add azat/unix:10 MIT-MAGIC-COOKIE-1 ad01c582768c832ff591277b27863bc7도움이 될 수 있다면 ($ DISPLAY = localhost : 10.0이므로) 이 레코드를 추가했습니다
azat

-1

원격 디스플레이를 로컬 디스플레이에 표시 work하려는 경우 ( ) 또는 원격 시스템에 표시하려는 경우 ( ) 명확하지 않습니다 home.

첫 번째 경우에는 ssh -X hostxhost를 사용할 필요없이 충분 하다고 생각 합니다.

두 번째 경우 xhost를 사용해야하는 시스템 home은 충분하지만 충분하지 않은 경우 표시 변수도 내 보내야합니다.

xhost +work
export DISPLAY=:0.0

나는 당신이 무엇을하고 싶은지 완전히 확신하지 못합니다 ... 그리고 나는 당신의 시스템과 광산 사이에 어떤 차이점이 있는지, 그리고 다른 한편으로는 당신에게 필요한 정확한 구성을 알지 못합니다. 저는 전문가가 아닙니다 (^ _ ^). 이 구성이 나에게 도움이 되었기 때문에 어떤 방식 으로든 도움이되기를 바랍니다.


나는 이미 시도했다 ssh -X home(포스트 작성). 예 로컬 디스플레이에 원격 앱을 표시하고 싶습니다.
azat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.