Xmanager FAQ

Xstart 접속 Show all answers Hide all answers

SSH 프로토콜 사용 시 X11 포워딩을 사용할 수 없는 경우

SSH 프로토콜 사용 시 X11 포워딩을 사용할 수 없는 경우


Xstart 세션 등에서 프로토콜을 SSH 선택한 경우 보통의 경우라면 SSH의 X11 포워딩을 이용하여 X 응용프로그램을 손쉽게 사용할 수 있습니다. 그러나 어떤 이유로 다음과 같은 메시지가 나오면서 X11 응용프로그램을 사용할 수 없는 경우가 있습니다.
1. The remote SSH server rejected X11 forwarding request.
또는
2. xauth: timeout in locking authority file
SSH 프로토콜은 X11 응용프로그램 사용 시 사용 권한이 있는지 여부를 판단하기 위해 Cookie 방식의 제어를 합니다.
위 메시지들은 이와 관련된 메시지로 X11 사용을 허용하지 않거나 다른 조건이 미흡할 때 나오는 메시지입니다.

위 1.의 메시지와 관련하여 원인과 해결 방법에 대한 자세한 내용은 다음 글을 참고해 보시기 바랍니다.

https://www.netsarang.co.kr/faq/xmanager/12274/The_remote_SSH_server_rejected_X11_forwarding_request.

위 2.의 메시지는 사용자의 접근 권한에 관한 문제로서 자세한 내용은 다음 글을 참고해 보시기 바랍니다.

https://www.netsarang.co.kr/faq/xmanager/12339/xauth_timeout_in_locking_authority_file

근본적인 문제 해결이 필요하지만 위 1.의 경우 시스템에 대한 수정 권한이 없는 경우 문제 해결이 어려울 수 있습니다.

이 글은 접속 프로토콜로 SSH를 사용하지만 X11 포워딩이 아닌 방법으로 X11 응용프로그램을 사용하는 방법에 대한 안내입니다.

인증은 SSH로 하지만 X11 통신은 일반 TCP 통신을 하는 방법

X11 응용프로그램이 암호화된 SSH의 터널이 아닌 Xmanager가 설치된 PC로 직접 접속을 하는 경우입니다.
  1. Xstart 세션을 만듭니다.
  2. 프로토콜을 SSH로 선택합니다.
  3. 실행 명령에 $DISPLAY 대신 $PCADDR:$DISPNO 변수를 넣습니다. $PCADDR은 PC의 IP 주소를, $DISPNO는 PC에서 Xmanager가 구동되고 있는 디스플레이 번호를 능동적으로 변환해 줍니다. Telnet 프로토콜 사용 시에는 $DISPLAY와 같은 값입니다. SSH 접속 시는 Telnet 프로토콜과는 달리 $DISPLAY를 변환하지 않고 문자열 그대로 전달합니다.
  4. Xmanager 구동이 완료되기 전에 명령이 전달되는 경우를 방지하기 위해 Xstart 명령어 태그인 <%SLEEP=n%>를 명령 앞에 추가합니다. n은 n초를 의미합니다.
    <%SLEEP=3%>/usr/bin/xterm -display $PCADDR:$DISPNO
    
  5. 원격 실행 결과를 보기 위해 '연결 상태 창 표시'를 선택합니다.
  6. 저장을 하고 실행 버튼을 누른 후 '연결 상태 창'에 $PCADDR:$DISPNO 부분에 PC IP 주소와 Xmanager의 디스플레이 번호인 0 또는 1 등이 제대로 변환되어 있는지 확인 후 xterm 등의 응용프로그램이 제대로 구동되었는지 확인합니다.
구동된 xterm에서 echo $DISPLAY 명령을 실행하여 '연결 상태 창'에 나와 있는 $PCADDR:$DISP의 결고와 같은지도 확인해 봐야 합니다. 

X11 포워딩이 아닌 SSH의 일반 터널링을 통해 X11 응용프로그램을 사용하는 방법

X11 포워딩은 SSH 터널링의 특수한 경우입니다. 일반 터널링에 사용자 인증을 위해 Xauth 쿠키를 사용합니다. 다음은 Xauth 쿠키를 사용하지 않는 일반 터널링을 이용하는 방법입니다.
  1. Xstart 세션을 만듭니다.
  2. 프로토콜을 SSH로 선택합니다.
  3. 설정 버튼을 눌러 'SSH 프로토콜 설정' 대화 상자를 엽니다.
  4. 터널링 탭을 누릅니다.
  5. 추가를 눌러 '포워딩 규칙' 대화 상자를 연 후 다음 내용을 입력합니다.
    • 종류(방향) : Remote (리모트에서 로컬로)
    • 원본호스트 : localhost 선택
    • 수신 대기 포트 : 6100 입력(예). 6000번 이상 임의의 포트 지정 가능. 시스템에서 사용하지 않는 포트를 지정해야 함.
    • 대상 호스트 : localhost 선택
    • 대상 포트 : 6000 입력(예). 구동 중인 또는 앞으로 구동할 Xmanager의 디스플레이 번호와 관련된 값 입력. 디스플레이 번호가 0이면 6000번을 1이면 6001을 입력.

  6. '확인'을 눌러 저장 후 '포워딩 규칙' 규칙 대화 상자를 닫습니다.
  7. '확인'을 눌러 'SSH 프로토콜 설정' 대화 상자를 닫습니다.
  8. '사용자 이름'을 입력하고 '인증 방법'을 선택한 후 '명령'란에 다음과 같이 입력합니다.
  9. 100은 위 수신 대기 포트 6100에서 6000을 뺀 값입니다.
    /usr/bin/xterm -display localhost:100
    
  10. 저장을 하고 실행 버튼을 누릅니다.
  11. 결과 프로그램인 xterm 등의 응용프로그램에서 echo $DISPLAY 명령을 실행하여 예의 'localhost:100'과 같은지 확인합니다.

이 방법들은 허가 받지 않은 사용자가 X11 구동 화면을 덤프하거나 키보드나 마우스 입력을 알아낼 수 있습니다. Xmanager의 접근 제어를 사용하여 이런 부분을 차단해야 합니다. 최선의 방법은 SSH 프로토콜 사용 시에는 X11 포워딩을 이용하는 방법입니다. 서버 설정 등의 환경이 조성되어 있지 않았을 경우 일시적인 사용에 활용할 수 있는 방법에 대한 안내였습니다.

xauth: timeout in locking authority file

SSH 프로토콜의 Xstart 세션이나 Xshell에서 X 응용프로그램을 구동하고자 할 때 다음 오류 메시지가 나오면서 X 응용프로그램이 구동되지 않는 경우가 있습니다.

1. .Xauthority 잠금 파일이 남아 있는 경우
.Xauthority-c, .Xathority-l이 사용자의 홈디렉토리 남아있어 xauth가 이 잠금 파일을 생성하지 못하는 경우입니다. 이 파일들을 모두 삭제합니다.

$ rm ~/.Xauthority-*

2. SELINUX로 보안이 강화된 사용 환경에서 .Xauthority 파일이나 사용자의 홈디렉토리가 보안 설정이 잘못된 경우
다음 명령으로 SELINUX의 기본 보안 설정이 되도록 합니다.

$ /sbin/restorecon -v -v ~/.Xauthority 
$ /sbin/restorecon -v -v -R ~

기타 사용자의 홈디렉토리가 해당 사용자에게  맞는 접근 권한이 없거나 디스크 용량이 부족하여 파일을 기록하지 못할 때 문제가 생길 수 있으니 이 부분도 확인해 보시기 바랍니다.

The remote SSH server rejected X11 forwarding request.

Xstart 세션에서 프로토콜을 SSH로 선택한 후 X 응용프로그래을 구동할 때 위 메시지가 나옵니다.

SSH 프로토콜에는 X11 응용프로그램을 위한 SSH 터널링의 특수한 형태인 X11 포워딩 기능을 제공합니다. 이 터널링은 다른 터널링과 달리 쿠키 기반의 사용자 인증이 포함되어 안전한 연결을 제공합니다.
X 서버에 대한 허가 받지 않은 연결을 차단하기 위한 것입니다.

관리자의 설정으로 혹은 설정상의 오류로 위 메시지가 발행합니다.

첨부의 sshd_config 설정은 제대로 된 것 같습니다. 다만 이 변경이 제대로 반영되었는지 확신하기 어려운 경우가 있고 기타 다른 이유로 같은 문제가 발생하기도 합니다..

1. sshd_config에서 X11 포워딩 옵션을 꺼 놓은 경우입니다. 시스템 기본 sshd라면 /etc/ssh/sshd_config 파일을 관리자가 따로 설치한 데몬이라면 /usr/local/etc/sshd_config 파일을 수정합니다.

[root@foo ~]# vi /etc/sshd_config
#X11Forwarding no
X11Forwarding yes

[root@foo ~]# service sshd restart 또는 systemctl restart sshd.service
=> 해당 시스템의 데몬 재구동 방법을 확인하여 맞는 명령어를 사용해 보세요.

2. restart 옵션으로 설정이 제대로 reload 되지 않는 경우가 있습니다. 가능하다면 시스템 재부팅 후 확인해 보시기 바랍니다.

3. sshd가 시스템 기본이 아닌 별도로 설치한 데몬으로 구동되는 경우가 있습니다. 이 경우는 보통 /usr/local/ 아래에서 설치되고 구동됩니다.

4. /usr/bin/xauth 프로그램이 설치되지 않았거나 어떤 이유로 이 프로그램을 구동하지 못하는 경우가 있습니다. 파일 존재 여부 및 명령어 실행 경로를 확인해 보세요.

5. 사용자의 홈 디렉토리에 X 관련 권한 파일인 .Xauthority 파일이 생성 및 수정되지 않는 경우가 있습니다. 홈 디렉토리 권한을 확인해 보시고 다음 명령을 실행한 후 사용해 보시기 바랍니다.

$ rm -f .Xauthority*

위 3, 4번에 대해서 보통은 추가적인 오류 메시지가 나오지만 그렇지 않은 경우도 있습니다.

이 내용은 OpenSSH와 Redhat 계열의 시스템을 참조하여 작성하였습니다. SSH.com 서버와 다른 리눅스 배포판에서는 이와 다를 수 있습니다.

Xstart 접속한 후에 CDE나 GNOME/KDE/Xfce 환경을 사용하려면 어떻게 해야하나요?

네트워크 구성 문제나 방화벽 등의 문제로 Xbrowser 등을 이용한 XDMCP 연결을 할 수 없는 경우 CDE나 GNOME/KDE 환경 등 원격 데스크톱 사용자 환경을 사용할 수 없는 문제가 발생합니다. 다음은 Xstart 접속을 이용하여 이런 환경을 구현하는 방법에 대한 내용입니다.
  • Xstart 접속 후 해당 명령어 실행
    Common Desktop 환경 (CDE) /usr/dt/bin/Xsession (DISPLAY 환경변수를 설정한 후 실행)
    GNOME 환경 /usr/bin/gnome-session
    K Desktop 환경 (KDE) /usr/bin/startkde
    Xfce 데스크톱 /usr/bin/xfce4-session
    XDM /usr/lib/X11/xdm/Xsession (Unix)
    /etc/X11/xdm/Xsession (Linux)

  • Xstart 세션으로 바로 실행시키는 경우
    • 실행 명령란에 DISPLAY=$DISPLAY;[해당 명령어]를 입력합니다. SSH 프로토콜을 사용한 접속일 경우에는 DISPLAY를 설정할 필요가 없습니다.
      DISPLAY=$DISPLAY; /usr/bin/gnome-session
    • Xconfig에서 프로필 등록 정보를 연 후, 옵션에서 'Xmanager 자동 끝내기'를 꺼야 합니다.
    • Xconfig의 프로필 등록 정보에서, 다중 창 모드(다중 윈도우 모드)일 경우에는 윈도우 매니저가 '자동전환'이나 '리모트만 사용'으로 선택되어 있도록 해야 합니다. 원격 데스크톱 사용자 환경을 원활하게 사용하고자 할 경우 다중 창 모드보다는 단일 창 모드를 권합니다.
  • Xstart 세션으로 CentOS GNOME  사용자 환경 구동 예.(Xmanager 버전 5의 경우)
    1. Xstart 프로그램을 실행합니다.
    2. 필요한 정보를 입력합니다.
    3. 고급 버튼을 눌러 '고급 옵션' 대화 상자를 엽니다.
    4. X 서버 탭에서 '서버 프로필'을 지정합니다.
      기본으로 제공되는 서버 프로필 중에서 'XDMCP 샘플'이 단일 창 모드를 기본으로 하고 있으므로 이 프로필을 선택한 후 확인을 눌러 저장합니다.
    5. 위 2의 Xstart 창에서 세션을 저장 후 실행을 누릅니다.
      다중 모니터 환경일 경우 모니터 선택 대화 상자가 나타날 수 있습니다. 사용 목적에 맞게 선택합니다.
    6. Gnome-session 실행 화면입니다.

윈도우를 움직일 수 없습니다.

윈도우 매니저가 구동되고 있지 않기 때문입니다.


윈도우 매니저

창 닫기, 확대 및 축소, 이동 등을 관리해 주는 프로그램입니다. MS 윈도우에도 이 프로그램이 기본적으로 구동되고 있습니다. Xmanager에서 이 MS 윈도우의 윈도우 매니저를 사용할 수 있으며 이 윈도우 매니저를 로컬 윈도우 매니저라고 합니다.

원격 윈도우의 종류

twm : Tab Window Manager : 고전적인 윈도우 매니저입니다. 메뉴를 불러오는 마우스 버튼이 기본적으로 왼쪽 버튼이어서 사용자가 불편할 수도 있으나 가장 흔히 설치되어 있다는 점이 장점입니다. 최근의 리눅스 시스템은 이를 수용하지 않고 있는 것 같습니다.
mwm : Motif Window Manager : 고전적인 윈도우 매니저로 대부분의 유닉스 시스템에 설치되어 있습니다. 창 관리가 MS 윈도와 비슷합니다.
olwm : Openlook Window Manager : Sun Microsystems의 Solaris OpenLook이라는 환경의 기본 윈도우 매니저입니다. OpenLook은 Solaris 10 이후 부터는 기본으로 탑재되어 있지 않고 Sun사도 공식적으로 지원을 하지 않겠다고 한 환경입니다.
fvwm, sawfish, metacity, gnome-wm : 리눅스 시스템의 윈도우 매니저로 창 관리나 모양에서 서로 다른 특색이 있습니다. 최근의 Gnome 환경에서는 metacity라는 윈도우 매니저를 사용하고 있습니다. 

원격 윈도우 매니저 구동

명령어를 입력할 수 있는 터미널에서 다음과 같이 윈도우 매니저를 실행합니다.

$ /usr/X11R6/bin/twm&
또는
$ /usr/X11R6/bin/mwm&
또는 
$ /usr/bin/metacity& 

Xmanager와 윈도우 매니저

Xmanger는 원격 윈도우의 창을 관리하기 위해 단일 윈도우 모드와 다중 윈도우 모드를 지원하고 있습니다. 단일 윈도우 모드는 Xmanager라는 윈도우 창 안에 원격 응용 프로그램이 구동하는 모드이고 다중 윈도우 모드는 원격 응용 프로그램 각각이 MS 윈도우의 창이 되어 구동하는 모드입니다. 이 두가지 모두 창 관리를 하기 위해서는 윈도우 매니저가 구동되어야 합니다.

다중 윈도우 모드 -> 로컬 윈도우 매니저, 원격 윈도우 매니저 선택 사용 가능(지정 혹은 자동 전환)
단일 윈도우 모드 -> 원격 윈도우 매니저만 사용 가능

GNOME(gnome-session), KDE(startkde), CDE(dtsession) 등을 Xstart에서 직접 구동하여 원격의 사용자 환경을 구현하고자 하는 경우가 있습니다. 이 때는 이 세션 구동 파일 내에 원격 윈도우 매니저를 구동하는 과정이 포함되어 있습니다.
이 외의 응용 프로그램을 Xstart에서 실행하는 경우는 로컬 윈도우 매니저를 사용하도록 하거나 원격 윈도우 매니저를 수동으로 구동하여야 합니다.

사용하시는 응용 프로그램에 따라 다음과 같이 설정해 보십시오.

Gnome-session,  startkde, dtsession 구동 => 단일 윈도우 모드 사용
xterm 등 기타 응용 프로그램 구동 => 로컬 윈도우 매니저인 다중 윈도우 모드 사용

Xstart 연결 시 호스트네임, 아이디, 패스워드를 입력하고 접속을 하려고 하니 다음과 같은 메시지가 나옵니다. Error: Can't open display: 192.168.1.100:0.0 Error: Couldn't find per display information

Xmanager는 서버 제품이므로 X응용프로그램이 PC의 Xmanager에 접속을 요청합니다. 이때 UNIX/Linux 시스템과 PC 사이의 네트워크 구성 문제나 방화벽 문제 등으로 X응용프로그램이 Xmanager로 연결을 할 수 없는 경우에 위와 같은 에러 메시지가 나옵니다.

UNIX/Linux 장비와 PC 모두 공인 IP 주소임에도 위와 같은 오류메시지가 나오는 경우는 네트워크 방화벽 문제이거나 PC의 방화벽 문제인 경우가 많으니 다음의 FAQ를 참조하여 방화벽 포트를 설정하시 바랍니다.


PC가 공유기 등으로 NAT 시스템 안에 놓여 사설 IP 주소를 갖는 경우는 외부의 UNIX/Linux 장비에서 PC 쪽으로 네트워크가 미치지 않으므로 NAT 포트포워딩 설정을 하거나 SSH 접속을 이용하여야 합니다. 더 자세한 설명은 다음의 FAQ를 참고하시기 바랍니다.


참고로 사설망의 IP 주소는 각 클래스마다 다음과 같습니다.
  • A class : 10.x.x.x
  • B class : 172.16.x.x ~ 172.32.x.x
  • C class : 192.168.x.x
  • xterm이 실행되지 않습니다.

    최신의 리눅스들은 xterm 경로가 바뀐 경우가 많습니다. Xstart에서 실행 명령 창 옆의 화살표를 눌러 xterm (Linux: Type1), xterm (Linux: Type2) 등으로 바꿔가며 실행해보시기 바랍니다.
    Type 1 : /usr/X11R6/bin/xterm -ls -display $DISPLAY
    Type 2 : /usr/bin/xterm -ls -display $DISPLAY

    Red Hat, SUSE에서 TELNET으로 연결을 할 수 없다고 나옵니다.

    최근 배포되는 다수의 Linux 시스템은 보안상의 이유로 기본적으로 TELNET을 설치하지 않거나 구동하지 않습니다. TELNET이 시스템에 설치되어 있는지 확인한 후 설치 되어 있다면 아래의 가이드를 따라서 TELNET 서버를 구동하십시오.
    1. /etc/xinetd.d/telnet 파일을 열어서 disable의 값을 no로 수정합니다.

      disable = no

    2. 파일을 수정 후 다음의 명령어로 xinetd를 재구동합니다.

      Red Hat: /etc/rc.d/init.d/xinetd restart
      SUSE: /etc/rc.d/xinetd restart

    대부분의 경우 보안상의 이유로 SSH 사용을 권장하고 있습니다. SSH를 사용하면 안정적인 연결 외에 X11 포워딩이나 터널링과 같은 추가적인 기능을 사용하실 수 있습니다.

    SSH 프로토콜을 이용하여 Xmanager를 사용할 수 있나요?

    Xmanager 버전 1.3.9 이상에서는 Xstart에서 SSH 접속을 지원합니다.

    SSH 프로토콜을 사용하려면 SSH 서버가 X11 포워딩을 지원해야 하며 서버별 설정은 다음과 같습니다.

    OpenSSH 서버인 경우 설정 파일 (/etc/ssh/sshd_config)을 다음과 같이 수정합니다.

    X11Forwarding yes

    Secure Shell Communications Security 서버인 경우 설정 파일 (/etc/ssh2/sshd2_config)을 다음과 같이 수정합니다.

    AllowX11Forwarding yes

    위와 같이 설정한 후 Xstart를 이용하여 X 프로그램을 실행하십시오.

    1. Xmanager 폴더(그룹)에 있는 Xstart를 실행
    2. [프로토콜]을 SSH로 선택
    3. [실행명령] 입력란에 다음의 예와 같이 xterm 등을 실행할 수 있는 명령을 입력

      /usr/bin/X11/xterm -ls

      SSH 프로토콜을 사용하는 경우에는 SSH 서버가 적절한 DISPLAY 값을 부여하므로 -display 옵션이 필요 없습니다.