Çözümü burada buldum: http://www.g-loaded.eu/2006/11/24/auto-closing-ssh-tunnels/
En iyi yol - Otomatik kapanan tüneller
Daha önce de belirtildiği gibi, -f -N anahtar kombinasyonunu kullanmak yerine, sadece -f komutunu kullanabiliriz, fakat aynı zamanda uzaktaki makineye bir komut verebiliriz. Ancak hangi komutu yerine getirmeliyiz, çünkü yalnızca bir tüneli başlatmamız gerekiyor?
Uyku, herkesin en faydalı emri olabilir. Bu özel durumda, uyku iki avantajı vardır:
- hiçbir şey yapmaz, bu yüzden hiçbir kaynak tüketilmez
- kullanıcı ne kadar süreyle yürütüleceğini belirleyebilir
Bunların ssh tüneli otomatik olarak kapatılmasında nasıl yardımcı olduğu aşağıda açıklanmıştır.
Uzaktaki makinede 10 saniye boyunca uyku komutunu yürütürken ssh oturumunu arka planda başlatırız. Saniye sayısı çok önemli değil. Aynı zamanda, vncviewer'ı tam olarak aşağıdaki gibi yürütürüz:
[me@local]$ ssh -f -L 25901:127.0.0.1:5901 me@remote.example.org sleep 10; \
vncviewer 127.0.0.1:25901:1
Bu durumda, ssh istemcisinin ssh oturumunu arka plana (-f) yerleştirmesi, tüneli yaratması (-L 25901: 127.0.0.1: 5901) ve uzak sunucuda 10 saniye boyunca uyku komutunu yürütmesi istenir (uyku) 10).
Bu yöntem ile öncekinin (-N anahtarı) arasındaki fark, temel olarak, bu durumda ssh istemcisinin öncelikli hedefi tüneli oluşturmak değil, uyku komutunu 10 saniye çalıştırmaktır. Tünelin oluşturulması ikincil bir amaç olan bir çeşit yan etkidir. Vncviewer kullanılmamışsa, ssh istemcisi 10 sn süresinden sonra çıkacak, yapacak başka işi kalmayacak, aynı anda tüneli yok edecek.
Uyku komutunun yürütülmesi sırasında, bu durumda vncviewer başka bir işlem varsa, bu tüneli kullanmaya başlar ve 10 sn'lik bir sürenin ötesinde işgalde tutar, ardından, ssh istemcisi uzaktaki işini bitirse bile (uyku işleminin yürütülmesi), çık çünkü başka bir işlem tüneli işgal ediyor. Başka bir deyişle, ssh istemcisi tüneli tahrip edemez çünkü vncviewer'ı da öldürmek zorunda kalır. Vncviewer tüneli kullanmayı bıraktığında, o zaman ssh istemcisi de hedefine ulaşmış olduğu için çıkar.
Bu şekilde, arka planda çalışan hiçbir ssh işlemi kalmaz.
/tmp/session1
( % desenlerini kullanarak isimlendirmek tavsiye edilse de - bkz. ControlPath açıklamasında)man ssh_config
)