SSH 터널이 포트를 할당하는 방법을 이해하고 확인하시겠습니까?

SSH 터널이 포트를 할당하는 방법을 이해하고 확인하시겠습니까?

오늘 저는 vnc에 대한 SSH 터널링과 관련된 작은 문제를 해결하려고 했습니다. 가능한 문제 중 하나는 다른 누군가가 이미 해당 포트에 터널링하고 있다는 것입니다. 문제의 구체적인 세부 사항을 다루지 않고도 SSH 터널이 리소스를 할당하는 방법과 리소스를 보는 방법을 잘 이해하지 못한다는 것을 깨닫게 되었습니다.

그래서 두 가지 질문이 있습니다. 첫째, SSH 터널을 생성했지만 터널이 현재 사용 중이 아닌 경우(즉, 내 로컬 시스템의 어떤 것도 터널 포트에 연결되어 있지 않은 경우) 어떤 포트가 현재 차단되어 다른 포트에서 사용할 수 없습니까? 내 소스 포트가 내 터널의 소유이므로 다른 애플리케이션에 의해 바인딩될 수 없다고 확신합니다. 하지만 대상 포트는 어떻습니까? 포트가 이미 터널에 바인딩되어 있습니까? 아니면 로컬 포트에 연결을 시도하고 연결이 SSH 터널을 통해 대상 포트로 이동할 때만 바인딩됩니까?

둘째, 내 시스템에 어떤 SSH 터널이 있는지 어떻게 확인합니까? 로컬에서 터널을 생성하는 경우 적절한 프로그램에 대해 ps 및 grep을 수행할 수 있지만 클라이언트가 내 서버 포트에 대한 로컬 터널을 생성하도록 하면 클라이언트가 존재하지 않더라도 내 서버에서 해당 터널이 존재하는지 확인할 수 있는 방법이 있습니까? 아직 터널을 통해 프로그램에 연결되어 있나요?

답변1

netstatlsof/또는 어떤 포트가 무엇에 의해 열리는지 확인하기 위한 일반적인 프로그램입니다fuser (그러나 root이러한 액세스는 Unix의 특성에 따라 필요할 수 있으며 다양합니다). 대상 포트를 공유하면 됩니다. 관련 시스템 호출을 이해하려면 Beej의 네트워킹 가이드를 살펴보는 것이 도움이 될 수 있습니다.

클라이언트가 아직 연결되지 않은 경우 클라이언트가 설정한 포트는 바인딩되지 않습니다. 이 단계는 연결이 설정될 때만 발생하기 때문입니다. (예외: 접속 종료 TIME_WAIT등으로 인해 포트가 지연될 수 있습니다.)

답변2

Linux 클라이언트에서는 다음을 netstat -lnp |less사용하여 수신 대기 포트를 볼 수 있습니다.

SSH 세션에서는 Enter를 두 번 누른 다음 를 입력할 수 있습니다 ~#. 현재 이 세션에 대해 전달된 포트가 나열됩니다.

답변3

가지다터널그리고포트 포워딩. 두 번째에 대해 이야기하고 있습니다. 용어를 혼동하지 마세요. 알겠죠?

(1)로컬 포트 ​​포워딩로컬 컴퓨터에서 전달된 조합이 host:port차단됩니다(연결 허용). 다른 쪽은 remote_host:remote_port다른 연결에 사용될 수 있습니다. 로컬 측에서 연결이 시작된 후 데이터가 전송됩니다.

~을 위한원격 포트 포워딩사실은 그 반대입니다.

(2) 다른 답변에서 제안한 것처럼 로컬 수신 포트보기를 사용할 수 netstat있으며 다중 연결/내부 연결을 사용하면 ~#활성 세션과 TCP 전달이 인쇄됩니다.

관련 정보