以下に示すように、リモートmysqlサーバーに安全に接続するためのsshトンネルを作成するbashスクリプトがあります。
ssh -f -N -L $LOCAL_PORT:localhost:3306 $REMOTE_USER@$REMOTE_IP
mysql -P $LOCAL_PORT -h 127.0.0.1 -u lapl_stg -p${REMOTE_DB_PASS} < ./t1.sql > ./out.txt
bashスクリプトでsshトンネルを開いた後、bashスクリプトを終了すると、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プロセスを強制終了する可能性があります。
ありがとうございました。