it-swarm-ko.tech

그래픽 응용 프로그램을 원격으로 실행하기 위해 SSH를 통해 X를 전달하는 방법은 무엇입니까?

Fedora 14 컴퓨터에서 SSH를 사용하는 Ubuntu를 실행하는 컴퓨터가 있습니다. 그래픽 프로그램을 원격으로 실행할 수 있도록 Ubuntu 시스템에서 Fedora로 X를 전달하고 싶습니다. 두 머신 모두 LAN에 있습니다.

나는 -X 옵션은 SSH에서 X11 전달을 활성화하지만 일부 단계가 누락 된 것 같습니다.

SSH를 통해 Ubuntu 시스템에서 Fedora로 X를 전달하는 데 필요한 단계는 무엇입니까?

390
Mr. Shickadance

클라이언트 쪽과 서버 쪽 모두에서 X11 전달을 활성화해야합니다.

클라이언트 측 에서 -X (자본 X) 옵션을 ssh로 설정하면 X11 전달이 가능하며 ForwardX11 yes~/.ssh/config .

서버 측 에서 X11Forwarding yes/etc/ssh/sshd_config . 기본값은 전달이 아닙니다 (일부 배포판은 기본 /etc/ssh/sshd_config) 사용자는이 설정을 무시할 수 없습니다.

xauth 프로그램은 서버 측에 설치해야합니다. X11 프로그램이 있다면 xauth가있을 가능성이 큽니다. xauth가 비표준 위치에 설치된 경우는 ~/.ssh/rc (서버에서!).

서버에서 환경 변수를 설정할 필요는 없습니다. DISPLAYXAUTHORITY가 자동으로 적절한 값으로 설정됩니다. ssh를 실행하고 DISPLAY가 설정되어 있지 않으면 ssh가 X11 연결을 전달하지 않음을 의미합니다.

Ssh가 X11을 전달하고 있는지 확인하려면 Requesting X11 forwarding에서 ssh -v -X 출력. 서버는 잠재적 공격자로부터 세부 정보를 숨기는 보안 예방 조치로 응답하지 않습니다 .

Ssh를 통해 X11 포워딩을 수행하려면 3 가지가 필요합니다.

  1. X11을 전달하도록 클라이언트를 설정해야합니다.
  2. X11 전달을 허용하도록 서버를 설정해야합니다.
  3. 서버는 X11 인증을 설정할 수 있어야합니다.

# 1과 # 2가 있지만 # 3이 없으면 빈 DISPLAY 환경 변수가 생깁니다.

Soup-to-nuts, X11 포워딩을 작동시키는 방법은 다음과 같습니다.

  1. 서버에서/etc/ssh/sshd_config에 다음이 포함되어 있는지 확인하십시오.

    X11Forwarding yes
    X11DisplayOffset 10
    

    Sshd를 SIGHUP해야 할 수도 있으므로 이러한 변경 사항을 적용합니다.

    cat /var/run/sshd.pid | xargs kill -1
    
  2. 서버에 xauth가 설치되어 있는지 확인하십시오.

    [email protected]:~$ which xauth
    /usr/bin/xauth
    

    Xauth가 설치되어 있지 않으면 "빈 디스플레이 환경 변수"문제가 발생합니다.

  3. 클라이언트에서 서버에 연결하십시오. ssh에게 X11 전달을 허용하도록하십시오. 나는 선호한다

    [email protected]:~$ ssh -X [email protected]
    

하지만 너는 좋아할지도 모른다

    [email protected]:~$ ssh -o ForwardX11=yes [email protected]

또는 ~/.ssh/config에서이를 설정할 수 있습니다.


오늘 관리하지 않는 새 서버에 ssh를 넣을 때이 빈 DISPLAY 환경 변수가 발생했습니다. 누락 된 xauth 부분을 추적하는 것은 약간 재미있었습니다. 여기 내가 한 일과 할 수있는 일이 있습니다.

관리자 인 로컬 워크 스테이션에서/etc/ssh/sshd_config가 X11을 전달하도록 설정되어 있는지 확인했습니다. localhost로 다시 ssh -X를 넣으면 DISPLAY가 올바르게 설정됩니다.

DISPLAY를 설정 해제하는 것이 그리 어렵지 않았습니다. 나는 sshd와 ssh가 올바르게 설정하기 위해 무엇을하고 있는지보아야했습니다. 여기 내가 한 모든 일의 전체 결과가 있습니다.

    [email protected]:~$ mkdir ~/dummy-sshd
    [email protected]:~$ cp -r /etc/ssh/* ~/dummy-sshd/
    cp: cannot open `/etc/ssh/ssh_Host_dsa_key' for reading: Permission denied
    cp: cannot open `/etc/ssh/ssh_Host_rsa_key' for reading: Permission denied

Sudo를 사용하여 ssh_Host_ {dsa, rsa} _key 파일을 강제로 복사하는 대신 ssh-keygen을 사용하여 더미 파일을 직접 만들었습니다.

    [email protected]:~$ ssh-keygen -t rsa -f ~/dummy-sshd/ssh_Host_rsa_key
    Generating public/private rsa key pair.
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /home/blyman/dummy-sshd/ssh_Host_rsa_key.
    Your public key has been saved in /home/blyman/dummy-sshd/ssh_Host_rsa_key.pub.

-t dsa로 헹굼 및 반복 :

    [email protected]:~$ ssh-keygen -t dsa -f ~/dummy-sshd/ssh_Host_dsa_key
    # I bet you can visually copy-paste the above output down here

올바른 새 ssh_Host 키 파일을 가리 키도록 ~/dummy-sshd/sshd_config를 편집하십시오.

    # before
    [email protected]:~$ grep ssh_Host /home/blyman/dummy-sshd/sshd_config 
    HostKey /etc/ssh/ssh_Host_rsa_key
    HostKey /etc/ssh/ssh_Host_dsa_key

    # after
    [email protected]:~$ grep ssh_Host /home/blyman/dummy-sshd/sshd_config 
    HostKey /home/blyman/dummy-sshd/ssh_Host_rsa_key
    HostKey /home/blyman/dummy-sshd/ssh_Host_dsa_key

비 분리 모드의 새 포트에서 sshd를 실행하십시오.

    [email protected]:~$ sshd -p 50505 -f ~/dummy-sshd/sshd_config -d
    sshd re-exec requires execution with an absolute path

그 경로를 더 잘 수정하십시오.

    [email protected]:~$ /usr/sbin/sshd -p 50505 -f ~/dummy-sshd/sshd_config -d
    debug1: sshd version OpenSSH_5.5p1 Debian-4ubuntu6
    debug1: read PEM private key done: type RSA
    debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
    debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
    debug1: private Host key: #0 type 1 RSA
    debug1: read PEM private key done: type DSA
    debug1: Checking blacklist file /usr/share/ssh/blacklist.DSA-1024
    debug1: Checking blacklist file /etc/ssh/blacklist.DSA-1024
    debug1: private Host key: #1 type 2 DSA
    debug1: setgroups() failed: Operation not permitted
    debug1: rexec_argv[0]='/usr/sbin/sshd'
    debug1: rexec_argv[1]='-p'
    debug1: rexec_argv[2]='50505'
    debug1: rexec_argv[3]='-f'
    debug1: rexec_argv[4]='/home/blyman/dummy-sshd/sshd_config'
    debug1: rexec_argv[5]='-d'
    Set /proc/self/oom_adj from 0 to -17
    debug1: Bind to port 50505 on 0.0.0.0.
    Server listening on 0.0.0.0 port 50505.
    debug1: Bind to port 50505 on ::.
    Server listening on :: port 50505.

새 터미널을 열고 포트 50505의 localhost에 ssh를 입력하십시오.

    [email protected]:~$ ssh -p 50505 localhost
    The authenticity of Host '[localhost]:50505 ([::1]:50505)' can't be established.
    RSA key fingerprint is 81:36:a5:ff:a3:5a:45:a6:90:d3:cc:54:6b:52:d0:61.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '[localhost]:50505' (RSA) to the list of known hosts.
    Linux skretting 2.6.35-32-generic #67-Ubuntu SMP Mon Mar 5 19:39:49 UTC 2012 x86_64 GNU/Linux
    Ubuntu 10.10

    Welcome to Ubuntu!
     * Documentation:  https://help.ubuntu.com/

    1 package can be updated.
    0 updates are security updates.

    Last login: Thu Aug 16 15:41:58 2012 from 10.0.65.153
    Environment:
      LANG=en_US.UTF-8
      USER=blyman
      LOGNAME=blyman
      HOME=/home/blyman
      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
      MAIL=/var/mail/blyman
      Shell=/bin/bash
      SSH_CLIENT=::1 43599 50505
      SSH_CONNECTION=::1 43599 ::1 50505
      SSH_TTY=/dev/pts/16
      TERM=xterm
      DISPLAY=localhost:10.0
    Running /usr/bin/xauth remove unix:10.0
    /usr/bin/xauth add unix:10.0 MIT-MAGIC-COOKIE-1 79aa9275ced418dd445d9798b115d393

마지막 세 줄을보십시오. 유감스럽게도 DISPLAY가 설정되었고/usr/bin/xauth의 Nice-looking 라인이 두 개있었습니다.

거기에서 내/usr/bin/xauth를 /usr/bin/xauth.old로 옮기고 ssh에서 연결을 끊고 sshd를 중지 한 다음 sshd 및 ssh를 localhost로 다시 시작하는 것은 어린이 놀이였습니다.

/ usr/bin/xauth가 사라 졌을 때 내 환경에 DISPLAY가 반영되지 않았습니다.


여기에는 화려한 일이 없습니다. 주로 로컬 컴퓨터에서이를 재현하기 위해 제정신의 접근 방식을 선택하는 데 운이 좋았습니다.

98
Belden

다음을 확인하십시오.

  • 서버에 xauth을 (를) 설치했습니다 (xauth info/xauth list 참조).
  • 서버에서 /etc/ssh/sshd_config 파일에는 다음 줄이 있습니다.

    X11Forwarding yes
    X11DisplayOffset 10
    X11UseLocalhost no
    
  • 클라이언트 쪽에서 ~/.ssh/config 파일에는 다음 줄이 있습니다.

    Host *
      ForwardAgent yes
      ForwardX11 yes
    
  • 클라이언트쪽에 X 서버가 설치되어 있습니다 (예 : macOS : XQuartz; Windows : Xming).


그런 다음 SSH를 사용하여 X11 전달을 수행하려면 ssh)에 _ {(add -X 명령을 추가해야합니다 (예 :.

ssh -v -X [email protected]

그런 다음 DISPLAYnot 비어 있는지 확인하십시오.

echo $DISPLAY

그렇다면 ssh (-v)에 대한 자세한 매개 변수가 있으면 경고가 있는지 확인하십시오 (예 :.

debug1: No xauth program.
Warning: untrusted X11 forwarding setup failed: xauth key data not generated

위와 같이 nrusted X11이있는 경우 try -Y flag 대신 (호스트를 신뢰하는 경우) :

ssh -v -Y [email protected]

-X로 ssh'ing 할 때“경고 : 신뢰할 수없는 X11 전달 설정 실패 : xauth 키 데이터가 생성되지 않음”은 무엇을 의미합니까?


경고 : xauth 데이터 없음 인 경우 새 .Xauthority 파일 (예 :.

xauth generate :0 . trusted
xauth list

새 .Xauthority 파일 생성/재 구축


위와 다른 경고가 표시되면 추가 힌트를 따르십시오.


43
kenorb
21
Ace

Windows 10에서 Ubuntu bash가 ssh -X를 실행하여 원격 서버에서 GUI 환경을 얻도록 허용

  • 먼저

다음을 모두 설치하십시오. Window에서 Xming를 설치하십시오. 터미널의 Ubuntu에서 Sudo apt install를 사용하여 ssh xauth xorg를 설치하십시오.

Sudo apt install ssh xauth xorg
  • 둘째

ssh_config 파일이있는 폴더로 이동하십시오. 내 파일은 /etc/ssh입니다.

  • 제삼

ssh_config를 관리자로 편집하십시오 (USE Sudo). ssh_config 내에서 ForwardAgent, #, ForwardX11 줄에서 해시 ForwardX11Trusted를 제거하고 해당 인수를 yes.

# /etc/ssh/ssh_config

Host *
    ForwardAgent yes
    ForwardX11 yes
    ForwardX11Trusted yes
  • 앞으로

ssh_config 파일에서 #Port 22 앞의 앞 해시 Protocol 2를 제거하고 파일 끝에 새 줄을 추가하여 xauth를 표시하십시오. 파일 위치, XauthLocation /usr/bin/xauth, xauth 파일의 경로를 직접 기억하십시오.

# /etc/ssh/ssh_config

#   IdentifyFile ...
    Port 22
    Protocol 2
#   Cipher 3des
#   ...
#   ...
    ...
    ...
    GSSAPIDelegateCredentials no
    XauthLocation /usr/bin/xauth
  • 다섯 번째

ssh_config 파일 편집이 완료되었으므로 편집기를 떠날 때 저장하십시오. 이제 ~ 또는 $HOME 폴더로 이동하여 export DISPLAY=localhost:0 파일에 .bashrc를 추가하고 저장하십시오.

# ~/.bashrc
...
...
export DISPLAY=localhost:0
  • 마지막

우리는 거의 끝났습니다. bash 쉘을 다시 시작하고 Xming 프로그램을 열고 ssh -X [email protected]를 사용하십시오. 그런 다음 GUI 환경을 즐기십시오.

ssh -X [email protected]

문제는 Windows의 Ubuntu 하위 시스템에도 있으며 링크는

https://Gist.github.com/DestinyOne/f236f71b9cdecd349507dfe90ebae776

5
DestinyOne

X11UseLocalhost no/etc/ssh/sshd_config에 추가하고 SSH 서버를 다시 시작하십시오.

표시되지 않으면 xauth가 올바르게 설치되었는지 확인한 후 다시 시도하십시오.

RHE/CEntos에는이 문제가 없습니다. 이것은 우분투입니다!

4
stephen cooke

나에게 문제는/tmp 파일 시스템의 nodev 마운트 옵션에 있었다. X11에는 특별한 파일을 만들어야합니다.

따라서 별도의 파티션이나 디스크를 사용하는 경우/tmp 파일 시스템에 대한 마운트 옵션이 무엇인지 확인하십시오.

1
yakovpol

이전 우수 답변에 추가하려면 (~/.ssh/config 및 클라이언트에 DISPLAY 환경 변수가 설정되어 있는지 확인하고 /etc/ssh/sshd_config 및 서버에 xauth 설치), xterm이 (가) 클라이언트에 설치되어 있는지 확인하십시오 (예 :.

Sudo apt-get install xterm
1
Aliz Rao

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.

사용

xauth -b

내가 ssh하려고했던 시스템에서 xauth의 잠금을 해제했습니다. xauth -b를 발행 한 후 ssh 세션에서 로그 아웃 한 후 다시 로그인하면 echo $DISPLAY에 성공했습니다. .Xauthority를 다시 만들기 전에 반드시 시도하십시오.

1

X11Forwarding의 SSH 서버 (이 경우 우분투 상자)에서 sshd_config를 설정해야하며 SSH 클라이언트 (Fedora 상자)에 X11이 전달되도록해야합니다. -X 옵션을 선택하거나 ssh_config 파일을 편집하여 ForwardX11 기본값을 추가하십시오.

1
Caleb