Bir program için bir SSH tüneli nasıl açılır ve daha sonra nasıl kapatılır?


0

İş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:

  1. 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.

  2. 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ı?


Kullanmak mümkün olabilir ssh -o LocalCommand=yourprogram Bağlantı kurulduktan sonra programı başlatmak için (ayarlamanız gerekebilir) PermitLocalCommand=yes ). Ancak, göre man ssh_config: "Etkileşimli komutlar için kullanılmamalıdır."
n.st

Yanıtlar:


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.