5
다음과 같이 원격 mysql 서버를 안전하게 연결하는 ssh 터널을 만드는 bash 스크립트가 있습니다. bash 스크립트 종료시 ssh 터널 자식 프로세스를 종료하는 방법
ssh -f -N -L $LOCAL_PORT:localhost:3306 [email protected]$REMOTE_IP
mysql -P $LOCAL_PORT -h 127.0.0.1 -u lapl_stg -p${REMOTE_DB_PASS} <./t1.sql> ./out.txt
은 bash는 스크립트의 종료에 따라, bash는 스크립트에서 SSH 터널을 연 후, 나는 SSH 터널 자식 프로세스가 아직 살아 것으로 나타났습니다.
netstat을 실행하면 스크립트가 종료 된 후 아래에 표시됩니다.
netstat -a -n -p -l
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:3308 0.0.0.0:* LISTEN 6402/ssh
tcp 0 0 10.44.44.11:46836 10.44.44.21:22 ESTABLISHED 6402/ssh
tcp6 0 0 ::1:3308 :::* LISTEN 6402/ssh
어떻게하면 스크립트에서 정리하기 위해 ssh 하위 프로세스 (6402)를 우아하게 종료합니까? 나는 'killall ssh'를 사용하는 것에 대해 생각했지만 사고로 다른 사람들이 만든 다른 ssh 프로세스를 죽일 수있었습니다.
감사합니다.
대단히 감사합니다. 그것은 작동합니다. 나는 -f 옵션을 사용하여 ssh가 백그라운드 프로세스가되고 스크립트 종료시 계속 실행된다는 것을 알지 못했습니다. ssh man 페이지를 읽는 것만으로는이 해결책을 찾기가 어렵습니다. 이것은 'killall ssh'보다 훨씬 뛰어나고 우아합니다. – user1026669
ssh의 -f 옵션으로 ssh가 백그라운드 모드가되는 경우 궁금합니다. 'echo $!' ssh 바로 뒤에는 아무 것도 표시되지 않습니다. – user1026669
글쎄, 그것은 * 백그라운드 프로세스로 포크 화하는 것이다. 즉, bash는 프로세스 ID를 얻기 위해 명시 적으로 알아야한다. 만약 당신이'-f'를 사용하지 않고 대신'ssh -N -L $ LOCAL_PORT : localhost : 3306 $ REMOTE_USER @ $ REMOTE_IP &'를 가지고 있다면 bash 작업을 다루고 있기 때문에'$!'는 PID를 돌려 줄 것입니다 그 시점에서 통제. – cwgem