프로그램의 SSH 터널을 올바르게 열고 나중에 닫는 방법은 무엇입니까?

프로그램의 SSH 터널을 올바르게 열고 나중에 닫는 방법은 무엇입니까?

작업(TCP 연결을 반복적으로 열기)을 위해 SSH 터널이 필요한 명령을 실행하고 싶습니다. 터널이 존재하면 터널을 다시 닫아야 합니다. 내가 겪은 문제는 다음과 같습니다.

  1. 백그라운드에서 즉시 명령을 실행할 수 있지만 터널이 설정되었는지 확인하는 신뢰할 수 있는 방법이 없습니다.

    #!/bin/bash
    set -e
    ssh -N -L lport:server:port host &
    trap "kill $!" EXIT
    sleep 1
    my program that connects to localhost:lport
    

    터널을 여는 데 1초 이상이 걸리는 경우가 종종 있습니다. 시간을 더 투자할 수도 있지만 그러면 사용자 경험이 그다지 좋지 않고 여전히 신뢰할 수 없습니다.

  2. 연결이 열릴 때 SSH 배경 자체를 허용할 수 있지만 배경 SSH 프로세스의 PID를 모르기 때문에 나중에 연결을 종료하는 안정적인 방법을 찾을 수 없습니다.

    #!/bin/bash
    set -e
    ssh -f -N -L lport:server:port host
    # I'd set up a trap ??? EXIT, but for what?
    my program that connects to localhost:lport
    

    SSH 프로세스의 PID를 감지하는 방법이 있습니까?

아니면 작업을 해결하는 또 다른 더 좋은 방법이 있습니까?

답변1

보다https://stackoverflow.com/questions/2241063/bash-script-to-setup-a-temporary-ssh-tunnelControl Socket 및 ExitOnForwardFailure가 포함된 답변을 확인하세요.

관련 정보