![프로그램의 SSH 터널을 올바르게 열고 나중에 닫는 방법은 무엇입니까?](https://rvso.com/image/1388801/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%98%20SSH%20%ED%84%B0%EB%84%90%EC%9D%84%20%EC%98%AC%EB%B0%94%EB%A5%B4%EA%B2%8C%20%EC%97%B4%EA%B3%A0%20%EB%82%98%EC%A4%91%EC%97%90%20%EB%8B%AB%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
작업(TCP 연결을 반복적으로 열기)을 위해 SSH 터널이 필요한 명령을 실행하고 싶습니다. 터널이 존재하면 터널을 다시 닫아야 합니다. 내가 겪은 문제는 다음과 같습니다.
백그라운드에서 즉시 명령을 실행할 수 있지만 터널이 설정되었는지 확인하는 신뢰할 수 있는 방법이 없습니다.
#!/bin/bash set -e ssh -N -L lport:server:port host & trap "kill $!" EXIT sleep 1 my program that connects to localhost:lport
터널을 여는 데 1초 이상이 걸리는 경우가 종종 있습니다. 시간을 더 투자할 수도 있지만 그러면 사용자 경험이 그다지 좋지 않고 여전히 신뢰할 수 없습니다.
연결이 열릴 때 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가 포함된 답변을 확인하세요.