`ssh -X` 이후 `$DISPLAY`에서 매핑을 찾는 방법은 무엇입니까?

`ssh -X` 이후 `$DISPLAY`에서 매핑을 찾는 방법은 무엇입니까?

머신 B에서 머신 C에 원격으로 액세스합니다.

$ ssh -X t@C
$ echo $DISPLAY
localhost:10.0

$DISPLAYC에서 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 전달 채널이 생성되었는데 $DISPLAYC와 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로 매핑"이란 무엇을 의미합니까?

분명히 grepC에서 뭔가 빠졌기 때문에 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 클라이언트가 전달자에 연결되어 있는지 확인한 다음 연결을 전달하는 위치 등을 확인하십시오.

관련 정보