포트 전달을 사용하여 SSH 연결을 설정하여 다음과 같이 원격 호스트가 로컬로 전달된 포트에 연결할 수 있도록 허용했습니다.
ssh -g -L 5115:localhost:5115 <server>
다음 오류 메시지가 표시되더라도 연결은 제대로 작동합니다.
바인딩: 주소가 이미 사용 중입니다.
어떤 포트를 선택하든 이 메시지가 나타납니다. 연결이 제대로 작동하는 것 같은데 왜 이 메시지가 나타나는지 궁금합니다. 내가 뭐 잘못 했어요?
답변1
주문하다:
ssh -g -L 5115:localhost:5115 <server>
로컬 ssh
프로세스가 0.0.0.0 포트 5115에 바인딩되어 전달될 연결을 수신하도록 합니다. 수신되는 오류 메시지는 일부 다른 프로세스가 이미 이 주소 및 포트에 바인딩되어 있어 ssh
작업을 수행할 수 없음을 나타냅니다.
netstat를 실행하여 이를 확인할 수 있습니다:
netstat -an | grep 5115
다음과 같은 줄이 표시될 수 있습니다.
tcp4 0 0 *.22 *.* LISTEN
"LISTEN"은 무언가가 연결을 듣고 있다는 뜻입니다. ".22"는 주소와 포트이고, 0.0.0.0 또는 "”는 “모든 인터페이스”를 의미합니다.
여기에서 선택할 수 있는 옵션은 포트 5115를 사용하는 다른 프로그램을 찾아서 중지하거나 SSH 터널에 다른 로컬 포트를 사용하는 것입니다.
답변2
Linux를 실행 중인 경우 루트로 다음 명령을 실행하여 경고를 음소거할 수 있습니다.
에코 1 > /proc/sys/net/ipv6/bindv6only
무슨 일이 일어나고 있는지는 ssh가 PF_INET 소켓을 바인딩하기 [::]:5115
전에 PF_INET6 소켓을 바인딩한다는 것입니다 0.0.0.0:5115
. PF_INET6 소켓은 두 개의 프로토콜에 바인딩되어 있으므로 두 번째 소켓을 바인딩하려는 시도는 실패합니다. 열면 bindv6only
더 이상 PF_INET6 소켓의 IPv4 주소를 건드릴 수 없습니다.
덜 파괴적인 접근 방식은 4개의 인수 형식을 사용하는 것입니다 -L
. 여기서는 바인딩 주소를 명시적으로 지정할 수 있습니다( 사용 0.0.0.0
).