머신 B에서 머신 C에 원격으로 액세스합니다.
$ ssh -X t@C
$ echo $DISPLAY
localhost:10.0
$DISPLAY
C에서 B로의 매핑을 찾고 확인하는 방법은 무엇입니까 $DISPLAY
? C에서 다음 명령으로 수행할 수 있습니까?
$ netstat -a | grep 6010
tcp 0 0 localhost:6010 0.0.0.0:* LISTEN
tcp6 0 0 ip6-localhost:6010 [::]:* LISTEN
X 전달 채널이 생성되었는데 $DISPLAY
C와 B LISTEN 간의 연결이 설정되지 않는 이유는 무엇입니까?$DISPLAY
C에서 X 클라이언트를 실행할 때 B(로컬 컴퓨터)의 X 서버에 연결되어 있는지 어떻게 확인할 수 있나요? X 클라이언트를 실행하기 전보다 아래에서 포트 6010에 대한 더 많은 정보를 얻을 수 있는 이유는 무엇입니까?
$ eog &
[1] 1129
$ netstat -a | grep 6010
tcp 0 0 localhost:6010 0.0.0.0:* LISTEN
tcp 0 0 localhost:59782 localhost:6010 TIME_WAIT
tcp 0 0 localhost:59780 localhost:6010 ESTABLISHED
tcp 0 0 localhost:59778 localhost:6010 TIME_WAIT
tcp 0 0 localhost:6010 localhost:59780 ESTABLISHED
tcp6 0 0 ip6-localhost:6010 [::]:* LISTEN
감사해요.
답변1
"C의 $DISPLAY를 B의 $DISPLAY로 매핑"이란 무엇을 의미합니까?
분명히 grep
C에서 뭔가 빠졌기 때문에 C에서는 "포트 번호 = 6010"과 관련된 소켓만 볼 수 있습니다. C의 다른 연결 또는 청취 소켓이 끊어졌습니다 grep
.
이전에는 실행 중인 X 클라이언트가 없었고 sshd(포트 번호 = 6010)에 연결되어 있었기 때문에 어떤 연결도 볼 수 없었습니다. 이후에는 X 클라이언트가 실행 중이고 sshd(포트 번호 = 6010)에 연결되었기 때문에 더 많은 정보를 볼 수 있습니다. 번호=6010).
SSH 터널을 사용하는 경우 네트워크 토폴로지를 이해해야 합니다. B의 SSH 클라이언트가 이를 요구하기 때문에 C의 SSH 서버는 포트 6010에서 수신 대기하는 새 소켓을 엽니다. B의 SSH 클라이언트와 C의 SSH 서버 사이에는 여전히 SSH 터널이 설정되어 있으며(특수 구성에 sshd가 존재하지 않는 경우 포트 번호=22) grep
종료한 이후에는 이 터널 연결을 볼 수 없습니다. C의 X 클라이언트는 sshd(포트 번호 = 6010)에 연결하고 sshd는 SSH 터널을 사용하여 이러한 연결을 다중화하고 이를 B의 X 서버로 전달합니다.
"C의 $DISPLAY와 B의 $DISPLAY 간의 연결"은 실제로 존재하지 않으며 SSH 터널은 C:22와 address_of_the_SSH_client_on_B 사이에 생성됩니다. 그리고 연결이기 때문에 LISTENING 상태에서는 불가능합니다.
더 많은 정보를 보려면 netstat -ap
없이 사용하세요 .grep
이 답변에서 언급한 모든 연결은 최종 사용자 관점의 "연결"이 아니라 커널 관점의 실제 TCP 연결을 의미합니다.
답변2
이제 X 전달 채널이 생성되었는데 C의 $DISPLAY와 B LISTEN의 $DISPLAY 간의 연결이 설정되지 않은 이유는 무엇입니까?
X 전달 채널이 아직 생성되지 않았습니다. 클라이언트가 6010
(원격) 시스템의 포트에 연결할 때만 생성됩니다. C
연결은 별도의 채널로 전달됩니다.통과하다ssh 연결( C
과 사이의 다른 TCP 연결을 통하지 않음 B
) SSH 연결을 통해 전달된 모든 채널을 표시하려면 ~#
줄 시작 부분에 이스케이프 문자를 사용해야 합니다.
$ ssh -X localhost
$ ~#
The following connections are open:
#0 client-session (t4 r0 i0/0 o0/0 fd 5/6 cc -1)
$ netstat | grep 6010
$ xterm &
$ ~#
The following connections are open:
#0 client-session (t4 r0 i0/0 o0/0 fd 5/6 cc -1)
#1 x11 (t4 r3 i0/0 o0/0 fd 8/8 cc -1)
$ netstat | grep 6010
tcp6 0 0 localhost:6010 localhost:39698 ESTABLISHED
tcp6 0 0 localhost:39698 localhost:6010 ESTABLISHED
C에서 X 클라이언트를 실행할 때 B(로컬 컴퓨터)의 X 서버에 연결되어 있는지 어떻게 확인할 수 있나요?
나는 이것을 확인할 수 있는 직접적인 방법을 모른다. X11 서버가 실행 중인 시스템을 반환하는 X11 핵심 프로토콜이나 확장 요청에 대해서는 알지 못합니다. 이 단계를 단계별로 수행해야 합니다. 먼저 X11 클라이언트가 전달자에 연결되어 있는지 확인한 다음 연결을 전달하는 위치 등을 확인하십시오.