autossh bağlantı kesildiğinde ssh'ı öldürmez


10

Autossh'ımı 30 saniyelik bir anket zamanı ile başlattım:

AUTOSSH_POLL=30 AUTOSSH_LOGLEVEL=7 autossh -M 0 -f -S none -f -N -L localhost:34567:localhost:6543 user1@server1

Ve iyi çalışıyor:

Sep  5 12:26:44 serverA autossh[20935]: check on child 23084
Sep  5 12:26:44 serverA autossh[20935]: set alarm for 30 secs

Ancak ağ kablosunu fiziksel olarak kaldırırsam, yani tünel artık çalışamazsa, autossh ssh daemon'unu öldürmez. Neden? Bağlantı kesilirse autossh hiçbir şey yapamayacağını anlıyorum, ancak bence aşağıdakileri yapmaya çalışmalıdır:

  1. Alt ssh işlemini doğrulayın ( check on child ...)
  2. Uzak ucu doğrulayın !!! (tünelden ping benzeri bir işlem)
  3. Tünelin kapalı olduğunu fark et
  4. Ssh işlemini durdur
  5. Tüneli tekrar oluşturmaya çalışın
  6. Çalışmadığını fark edin ve yakında tekrar kontrol etmek için (üssel olarak artan?) Bir zamanlayıcı ayarlayın

Bu yüzden autossh kullanıyorum: tünele bir şey olursa (bir yazılım veya donanım sorunu olsun), yeniden başlatmayı denemelisiniz. Bunun yerine, sadece ssh sürecinin ölmesini bekliyor. Bağlantıyı yeniden kurma umudu olmasa bile, yeniden başlatmaya çalışmamalı mı?

Autossh ne tür bir çek yapıyor? Sadece ssh'ın çalışır durumda olduğunu doğrulayın? Herhangi bir ileri seviye kontrol yapmıyor mu?

Düzenle

İstendiği gibi, ssh config ilgili bölümünü ekleyin:

# (see http://aaroncrane.co.uk/2008/04/ssh_faster)
# The ServerAliveInterval tells SSH to send a keepalive message every 60 seconds while the connection is open;
#   that both helps poor-quality NAT routers understand that the NAT table entry for your connection should
#   be kept alive, and helps SSH detect when there’s a network problem between the server and client.
ServerAliveInterval 60
# The ServerAliveCountMax says that after 60 consecutive unanswered keepalive messages, the connection should
#   be dropped. At that point, AutoSSH should try to invoke a fresh SSH client. You can tweak those
#   specific values if you want, but they seem to work well for me.
ServerAliveCountMax 60

TCPKeepAlive yes

zaman aşımı süresini azaltmaya ne dersiniz?
Nikolaidis Fotis

Bir süre autossh kullandık, ancak özellikle bağlantı noktası iletimleriyle birleştirildiğinde, kesikli bağlantılarda çok güvenilmezdi. Şimdi OpenVPN kullanıyoruz ve bundan çok memnunuz.
Nils Toedtmann

@NikolaidisFotis: zaman aşımı iyi. Zaman aşımına uğradı. Ancak zaman aşımı başladığında doğru olanı (imho) yapmaz , yani: uzak ucu doğrulamak !
dangonfast

@NilsToedtmann: teşekkürler, bir deneyeceğim. Uygulaması kolay mı? İyi bir nasıl yapılır diye bağlantınız var mı?
dangonfast

OpenVPN oldukça basittir, sadece 'apt-get install' ettik ve dev tunher ikisini de kullanarak ve remoteistemci yapılandırmasındaki ayarı kullanarak sunucu veya istemci için varsayılan yapılandırmalarla başladık . Tek can sıkıcı bit sertifikaları yönetmektir. OpenVPN ile birlikte gelen 'easy-rsa' CA'sını kullanıyoruz. Sertifikaları aldıktan sonra, gerisi kolaydır.
Nils Toedtmann

Yanıtlar:


11

Ancak ağ kablosunu fiziksel olarak kaldırırsam, yani tünel artık çalışamazsa, autossh ssh daemon'unu öldürmez. Neden?

autossh istemci makinenizde çalışır, bu nedenle sunucudaki ssh arka plan programı işlemini doğrudan öldüremez. Ancak, için sıfır olmayan bir değer belirtebilirsiniz ClientAliveIntervaliçinde /etc/ssh/sshd_configsunucuda (bkz man sshd_config) ve yapılandırma değişikliği uygulamak için sunucuda sshd hizmetini yeniden başlatın. Daha sonra bir ağ bağlantısının kesilmesi durumunda, ssh arka plan programı işlemi ClientAliveInterval * ClientAliveCountMaxsaniyeler sonra öldürülecektir (ancak autossh tarafından değil).

Şimdi, "Otomatik ssh neden ssh istemci işlemini öldürmez?" , belirttiniz -M 0. Autossh man sayfasından:

Setting the monitor port to 0 turns the monitoring function off, and autossh will only restart ssh upon ssh's exit.

Bağlantıyı izlemek için autossh kullanmak yerine, ssh'nin ServerAliveCountInterval * ServerAliveCountMaxsaniye zaman aşımından sonra çıkmasını bekliyorsunuz . Ssh çıkışlarından önce 60 ardışık kontrolleri ayırarak 60 saniyelik sunucu canlı kontrolleri istediniz, bu nedenle ssh istemcinizden çıkmadan bir saat önce bekleyeceksiniz.

ExitOnForwardFailureİstemci tarafında (bkz. man ssh_config) Seçeneği kullanmayı da düşünebilirsiniz , böylece ssh bir tünel oluşturamazsa çıkacak ve daha sonra autossh ssh'yi tekrar başlatmayı deneyebilir.


Teşekkürler, bu mantıklı. Gerçekten sunucu işlemi değil, "istemci süreci" demekti.
dangonfast

Autossh man sayfasını tekrar okuduktan sonra neden ayarladığımı hatırlıyorum -M 0: bir izleme portu kullanmak kolay değil ve dolaylı olarak cesaretini kırıyor: Birçok yönden bu izleme portundan daha iyi bir çözüm olabilir
dangonfast
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.