여기에서 해결책을 찾았습니다 : http://www.g-loaded.eu/2006/11/24/auto-closing-ssh-tunnels/
가장 좋은 방법 – 자동 폐쇄 터널
앞에서 언급했듯이 -f -N 스위치 조합을 사용하는 대신 -f 만 사용하고 원격 시스템에서 명령을 실행할 수도 있습니다. 그러나 터널을 초기화하기 만하면되므로 어떤 명령을 실행해야합니까?
이것은 수면이 가장 유용한 명령이 될 때입니다! 이 특정 상황에서 수면에는 두 가지 장점이 있습니다.
- 아무 것도하지 않으므로 리소스가 소비되지 않습니다
- 사용자는 실행 시간을 지정할 수 있습니다
ssh 터널 자동 폐쇄에 도움이되는 방법은 아래에 설명되어 있습니다.
원격 시스템에서 sleep 명령을 10 초 동안 실행하면서 백그라운드에서 ssh 세션을 시작합니다. 초 수는 중요하지 않습니다. 동시에, 우리는 이전과 동일하게 vncviewer를 실행합니다 :
[me@local]$ ssh -f -L 25901:127.0.0.1:5901 me@remote.example.org sleep 10; \
vncviewer 127.0.0.1:25901:1
이 경우 ssh 클라이언트는 ssh 세션을 배경 (-f)으로 분기하고 터널을 생성 (-L 25901 : 127.0.0.1 : 5901)하고 10 초 동안 원격 서버에서 sleep 명령을 실행하도록 지시합니다 (sleep 10).
이 방법과 이전 방법 (-N 스위치)의 차이점은 기본적으로이 경우 ssh 클라이언트의 주요 목표는 터널을 생성하는 것이 아니라 sleep 명령을 10 초 동안 실행하는 것입니다. 터널의 생성은 부수적 인 목표 인 일종의 부작용입니다. vncviewer를 사용하지 않으면 ssh 클라이언트는 더 이상 수행 할 작업이 없으므로 동시에 터널을 파괴하므로 10 초 후에 종료됩니다.
휴면 명령을 실행하는 동안이 경우 다른 프로세스 인 vncviewer가 해당 터널을 사용하기 시작하고 10 초를 초과하여 점유 상태를 유지하면 ssh 클라이언트가 원격 작업을 완료하더라도 (수면 실행) 다른 프로세스가 터널을 점유하므로 종료하십시오. 즉, ssh 클라이언트는 vncviewer도 종료해야하므로 터널을 파괴 할 수 없습니다. vncviewer가 터널 사용을 중지하면 ssh 클라이언트도 이미 목표를 달성 했으므로 종료됩니다.
이런 식으로 ssh 프로세스가 백그라운드에서 계속 실행되지 않습니다.
/tmp/session1
( % 패턴을 사용하여 이름을 지정하는 것이 좋지만 -의 ControlPath 설명 참조man ssh_config
)