Aşağıda gösterildiği gibi uzak mysql sunucusunu güvenli bir şekilde bağlamak için ssh tüneli oluşturan bir bash komut dosyası var. ssh tüneli alt işleminin bash komut dosyası çıkışı üzerine sonlandırılması
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 script çıkışta, bash komut ssh tünel açtıktan sonra, ben SSH tünel çocuk süreci hala hayatta olduğunu fark ettim.
Komut dosyası çıkarıldıktan sonra, netstat yaparsanız, aşağıdakini gösterir.
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 alt işlemlerini (6402) betikte temizlemek için nasıl sonlandırırsınız? 'Killall ssh' kullanmayı düşündüm ama başkaları tarafından yaratılan diğer ssh süreçlerini kaza ile öldürebilirim.
Teşekkür ederiz.
Çok teşekkür ederim. İşe yarıyor. Ben -f seçeneği ile, ssh arka plan işlemi haline geldiğini ve script çıkışında çalışmaya devam ettiğini bilmiyordum. Bu çözümü sadece ssh man sayfasını okuyarak bulmak zor. Bu 'killall ssh'den çok daha iyi ve daha zarif. – user1026669
ssh -f seçeneği ssh'i arka plan moduna geçirirse, nasıl olur da 'echo $!' hala ssh'den sonra hiçbir şey göstermiyor. – user1026669
Eh, * bir arka plan sürecine * forking * yani bash, işlem kimliğini almak için açıkça bilmesi gerektiği anlamına gelir. Eğer '-f 'kullanmadıysanız ve bunun yerine ssh -N -L $ LOCAL_PORT: localhost: 3306 $ REMOTE_USER @ $ REMOTE_IP &' alsaydınız, '$!' Bash işi ile uğraştığınız için bir PID verirdi. o noktada kontrol. – cwgem