İlgili soru: Sunucudan istemciye ssh bağlantısı başlat
Oradan cevap bana çok yardımcı oldu, bu komut ihtiyacım olanı yapıyor:
ssh -R 2225:localhost:22 loginOfServerWithPublicIP@publicIP
Böylece her zaman yeniden bağlanmak için senaryo yazdım:
#!/bin/bash
while true; do
echo "try to connect..."
ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host
echo "restarting in 5 seconds.."
sleep 5
done
Ve bunu da ekledi /etc/crontab
. Fakat bunun sadece kabuğundan "elle" çalıştırılması durumunda işe yaradığını öğrendim, ancak cron tarafından çağrılırsa ssh bağlanır ve hemen biter. (yani, yukarıdaki komut dosyası her zaman yeniden bağlanır)
Ondan man ssh
, arkaplan bağlantıları için onu -n
anahtarla çağırmam gerektiğini öğrendim , ancak yardımı olmadı. Sonra, sadece benzer betikleri araştırdım ve aradığımı tail -f something
, bazı "bitmeyen" komutları çağırdığımda çalıştığını gördüm , bu yüzden boş bir dosya oluşturdum /tmp/dummy_file
ve şimdi ssh komutum şöyle gözüküyor:
ssh -o ServerAliveInterval=240 -R 2225:localhost:22 -n user@host tail -f /tmp/dummy_file
Şu an çalışıyor! Ancak, bu çözüm biraz çirkin görünüyor, artı bu davranışın gerçek nedenlerini gerçekten anlamıyorum. Sadece tesadüfen, bash
yerine aramaya çalıştım tail -f
( bash
bana da "bitmeyen" emri geldi), ama işe yaramadı.
Öyleyse, lütfen kimse bu davranışı açıklayabilir mi ve ters ssh tüneli açık tutmak için arkaplan ssh bağlantısı oluşturmanın doğru yolu nedir?
while
tekrar tekrar çalışacağım, ssh
her 5 saniyede bir yeni arkaplan bağlantısı başlıyor , değil mi? İhtiyacım olan bu değil.
&
ssh komutunuzun sonunda kullanmaya ne dersiniz :ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host &