İşlemi için SSH tüneli gerektiren bir komutu çalıştırmak istiyorum (TCP bağlantılarını tekrar tekrar açmak). Vardıktan sonra tünelin tekrar kapatılması gerekir. Karşılaştığım sorunlar:
Komutu hemen arka planda çalıştırabilirim, ancak tünelin kurulduğundan emin olmak için güvenilir bir yolum yok:
#!/bin/bash set -e ssh -N -L lport:server:port host & trap "kill $!" EXIT sleep 1 my program that connects to localhost:lport
Genellikle tüneli açmanın 1 saniyeden uzun sürmesi olur. Ayrıca oraya daha fazla zaman ayırabilirdim, ama sonra kullanıcı deneyimi çok iyi değil ve yine de güvenilmez.
Bağlantı açıldığında SSH arkaplanının kendisine izin verebiliyorum, ancak daha sonra onu nasıl öldüreceğinin güvenilir bir yolunu bulamıyorum, çünkü arkaplan SSH işleminin PID'sini bilmiyorum:
#!/bin/bash set -e ssh -f -N -L lport:server:port host # I'd set up a trap ??? EXIT, but for what? my program that connects to localhost:lport
SSH sürecinin PID'sini tespit etmenin bir yolu var mı?
Yoksa görevi çözmenin daha iyi bir yolu var mı?
ssh -o LocalCommand=yourprogram
Bağlantı kurulduktan sonra programı başlatmak için (ayarlamanız gerekebilir)PermitLocalCommand=yes
). Ancak, göreman ssh_config
: "Etkileşimli komutlar için kullanılmamalıdır."