SSH 프로토콜 사용 시 Can't open display: localhost:10.0 메시지

Xstart 세션을 통해서나, Xshell에서 접속 프로토콜을 SSH로 선택한 후 접속하여 Xterm과 같은 X응용프로그램을 구동하고자 할 때 Can't open display: localhost:10.0과 같은 오류 메시지가 출력되면서 X 응용프로그램이 구동되지 않는 경우가 있습니다.

원인과 해결책은 다음과 같습니다.

사용자가 수동으로 DISPLAY를 지정해 놓은 경우

DISPLAY 환경 변수에 대한 이해가 충분하여 의도한 경우가 아니라면 해당 설정을 제거하여야 합니다.

사용자의 홈디렉토리에 있는 시작 스크립트 등에 DISPLAY를 강제로 설정해 놓은 경우입니다.
시작 스크립트로는 사용하는 셸에 따라 다릅니다 .bash_profile, .bashrc, .profile, .login, .cshrc, .zshrc 등이 있습니다.

사용자의 사용 환경이 적용되는 과정은 시스템 시작 스크립트와 사용자 시작 스크립트가 관여할 수 있으므로 사용하는 셸의 도움말(MAN)을 참고하여야 합니다.

localhost가 잘못 설정된 경우

/etc/hosts 파일에서 localhost의 설정이 127.0.0.1이 되도록 합니다.

자주 있는 경우는 아니지만 localhost가 등록되어 있지 않거나 다른 값으로 설정된 경우가 있습니다.

root의 권한으로 해당 파일을 편집하여 제대로 된 설정을 하여야 합니다.

# vi /etc/hosts ... 127.0.0.1 localhost ...

MIT-MAGIC-COOKIE를 처리하지 못하는 경우

SSH 프로토콜은 X11 포워딩이라는 터널링 기능을 이용하여 원격의 X 응용프로그램을 안전한 SSH 터널을 통해서 구동합니다. 이 때 SSH 클라이언트와 SSH 서버 간에 서로 약속된 값(Cookie)을 확인하는데요. SSH 접속 후 이 값을 사용자의 홈 디렉토리에 있는 .Xauthority라는 파일에 기록하게 됩니다. 이 쿠키 값의 확인을 통해서 허가 받은 사용자만 X11 응용 프로그램을 구동할 수 있도록 합니다.

이 쿠키 값을 기록하는 데 문제가 있거나, 기록한 값을 읽어 오지 못할 경우 X11 포워딩 기능이 작동하지 않아 이와 같은 오류 메시지가 나올 수 있습니다.

COOKIE를 처리하지 못하는 경우는 여러 가지가 있습니다.

  1. xauth 툴이 없어 쿠키 값을 기록할 수 없는 경우
    xauth 명령어가 경로에 없거나 해당 파일이 있는 패키지가 설치되어 있지 않은 경우입니다. 경로에 없는 경우는 SSH의 설정 파일인 sshd_config 파일에서 설정해 줘야 하나 이것이 문제가 되는 경우는 드묾니다.

    ssh 서버는 설치되어 있지만 xauth가 설치되어 있지 않은 경우는 자주 발생하는 경우입니다. 사용하는 유닉스/리눅스의 설치 관리자를 사용하여 xauth가 포함된 패키지를 설치해야 합니다.

    Ubuntu 계열의 경우

    # apt install xauth


    Redhat 계열의 경우

    # yum search xauth ... ================================= N/S matched: xauth ===================================== xorg-x11-xauth.x86_64 : X.Org X11 X authority utilities # yum install xorg-x11-xauth ...

     

  2. .Xauthority 파일에 접근할 수 없는 경우
    사용자 홈 디렉토리의 접근 권한이 제대로 되어 있는지 확인 후 문제가 있다면 수정합니다.


    사용자 홈 디렉토리에 .Xauthority-c 파일이나 .Xauthority-l 파일이 있다면 삭제합니다.
    해당 파일은 세션이 끝난 후 삭제되어야 하지만 남아 있는 경우가 있습니다. 이 파일들이 있다면 .Xauthority 파일에 제대로 된 정보를 기록할 수 없습니다.

     

  3. su 명령 등으로 사용자를 바꾼 경우
    su 명령 등으로 사용자를 바꾼 경우 사용 환경에 따라서 DISPLAY 환경 변수는 전달이 될 수도 있지만 쿠키 값은 전달되지 않는 경우가 있습니다. 일반 사용자에서 다른 일반 사용자에게로 전환된 경우 쿠키 값은 전달이 되지 않습니다.
    사용자 전환 후 X 응용프로그램을 사용하여야 한다면 전환된 사용자가 전환 전 사용자의 쿠키 값을 알고 있어야 합니다.

     

SSH 서버가 X11 포워딩을 처리하지 못하는 경우

알 수 없는 어떤 이유로 SSH 서버의 설정에서 X11 포워딩을 사용하도록 설정되어 있음에도 Can’t open display 오류 메시지가 나오는 경우가 있습니다.