SSH 터널에 동적으로 할당된 포트 저장

SSH 터널에 동적으로 할당된 포트 저장

이미 하나가 있습니다여기에 대한 훌륭한 질문과 답변하지만 저는 상황이 다릅니다.

다음 명령을 사용하여 터널을 생성합니다.

$ ssh -N -R 0:192.168.0.16:80 [email protected]
Allocated port 35007 for remote forward to 192.168.0.16:80

-f할당된 포트에 대한 출력이 표시됩니다. 그러나 플래그를 터널 배경으로 사용하면출력이 없어요stdout/strerr.

이 경우 원격 서버에서 일부 스크립트를 실행하거나 다음과 같은 소켓을 사용하지 않고 포트를 알 수 있는 방법이 있습니까?제가 위에 링크한 질문은?

감사해요!

답변1

-f플래그를 사용하려고 시도하면 그렇지 않은 경우 보고될 수 있는 보고가 방지됩니다. 문서( man ssh, 검색 ) 를 보면 -f우리가 볼 수 있는 것은

-f명령이 실행되기 전에 요청이 ssh백그라운드로 이동합니다.

하지만 다음 단락에서 우리는 읽을 수 있습니다.

ExitOnForwardFailure구성 옵션이 로 설정된 경우 yes시작된 클라이언트는 -f모든 원격 포트 전달이 성공적으로 설정될 때까지 기다린 후 백그라운드에 배치합니다.

즉, 이 설정이 없으면 명령이 즉시 백그라운드로 전환되므로 할당된 포트를 사용자에게 보고할 수 없습니다.

그 결과 다음과 같은 메시지를 보고하는 수정된 명령이 생성됩니다 Allocated port 1234 for remote forward to 192.168.0.16:80.

ssh -o ExitOnForwardFailure=yes -fN -R 0:192.168.0.16:80 [email protected]

그러나 이를 변수에 캡처하려고 시도하면 해당 내용이 변수에 기록되고 있음을 빠르게 식별할 수 있습니다.표준 에러대신에표준 출력. 따라서 최종 해결책은 다음과 같습니다.

port=$(
    ssh -o ExitOnForwardFailure=yes -fN -R 0:192.168.0.16:80 [email protected] 2>&1 |
    awk '/Allocated/{print $3+0}'
)
[ -n "$port" ] && echo "Port $port was allocated"

다음 출력을 생성합니다.

Port 42655 was allocated

관련 정보