한 다리 건너뛸 때 X프로그램 실행시키기는 어떻게 하나요?

s9204의 이미지

제컴 <--ssh--> 리눅스(A) <--ssh--> 리눅스(B)

이렇게 B에 접속해서 무언가를 하고 있습니다. 그런데 B에 접속해서
X 프로그램을 실행하면 x를 열수 없다고 하며 실행이 되지 않습니다...

어떻게 해야 하나요?
흠..B에 접속할때 뜨는게 xterm이 아닌건가요?

rhheo의 이미지

X윈도우가 어떤 원리로 돌아 가는지 이해를 하면 해답이 보일 듯 합니다.

저두 X윈도우 프로그래밍은 해 본 적은 없지만
개념만 풀어 보면 이렇습니다.

X서버 : 화면에 그리고 키보드/마우스입력을 관리하는 프로그램 (예:XFree86, Cygwin X등)
X클라이언트 : GUI를 사용하는 어플리케이션(예:WebBrowser, xterm등)

X서버와 클라이언트는 정해진 protocol에 맞춰서 tcp/ip통신을 통해 정보를 주고 받습니다.

이해를 돕기 위해 예를 들어 보면... (보안문제는 일단 배제..., 화면번호도 일단 배제...)

제컴 <-- telnet --> 리눅스

의 상황에서 원격 GUI프로그램을 실행하기 위해서는
1.제컴에 X server를 실행합니다. (리눅스 데스크탑이라면 이미 실행중이겠죠. 윈도우즈라면 Cygwin의X를실행)
2.리눅스에 telnet 로그인
3.DISPLAY환경변수에 제컴의ip를 지정
4.xterm등을 실행 (xterm은 DISPLAY환경 변수를 보고 제컴의 X server에 접속해서 화면 그리기를 명령을 보내게 됩니다.)
의 순으로 실행합니다.

제컴 <-- telnet --> 리눅스A <-- telnet --> 리눅스B
의 상황이라도 리눅스B에 접속해서 DISPLAY를 제컴으로 지정하면 문제없이 동작해야겠죠.

문제는 일반적인 네트웍환경에서는 중간에 방화벽이 끼어있는 경우가 많기 때문에 DISPLAY를 지정해도
xterm이 내 X server로 바로 접속이 불가능한 경우가 생깁니다.
이를 우회하기 위해 포트 포워딩을 사용합니다.

포트 포워딩이란...
"제컴 <-- telnet --> 리눅스A"의 예로 설명하면
1.리눅스A에다가 제컴의 X server가 있는 것 처럼 포트를 open하는겁니다.(ssh에 이런 기능이 기본으로있음)
2.이 포트로 접속해서 데이터를 보내면 제컴의 X서버로 전달(포워드)되도록 해둡니다. (ssh에 이런 기능이 기본으로있음)
3.DISPLAY변수에 리눅스A를 지정합니다.
4.리눅스A에서 xterm실행
결과적으로 xterm은 DISPLAY변수를 보고 리눅스A의 포트로 접속하고
데이터 송수신을 하면 제컴의 X server로 송수신하게됩니다.
이런 종류의 전달을 포트 포워딩 이라고 합니다.

ssh를 사용하면 가상의 전달 포트를 open하고 DISPLAY를 지정하는 것이 자동으로 이루어 지게 할 수 있습니다. (위의 설명 1 ~ 3번까지)
한번에 두마리 토끼를 잡는거죠.. (실제로는 보안까지 합쳐서 3마리지만...)

여튼... 그림으로 그려가 보면서 연구해 보시기 바랍니다. ^^

마지막으로 리눅스A와 리눅스B 사이에 방화벽이 없다는 전제하에서
질문에 대한 답변을 해보면요....

리눅스A에서 echo $DISPLAY 명령으로 DISPLAY값을 봅니다.
아마

리눅스A:12.0
와 비슷한 값으로 정해져 있을겁니다.
이제 리눅스B에 접속하셔서 DISPLAY값을
 리눅스A의 아이피:위에서 찾은 번호(예에서는 12.0)

으로 지정하고 xterm를 실행해 보세요.

성공하시길...

rhheo의 이미지

리눅스A에서

 ssh -X 리눅스B
하셔도 될 것 같은데요...

ssh접속하셨을 때 각각의 DISPLAY변수 값을 붙여 주시면 더 알기 쉬울 듯 합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.