SSH bağlantısı ağ yeniden başlatılmasından nasıl kurtulur?


63

Bir Linux SSH kabuğundan, /etc/init.d/network restartağ servisini yeniden başlatmak için yazın .

SSH bağlantımın şebeke servisi durduğundan beri bitmesini bekliyorum. Ama öyle değil. Çok havalı. Peki Linux bunu nasıl başarır? SSH bağlantımı hizmetin yeniden başlatılmasında nasıl canlı tutar?

Yanıtlar:


69

Bunu özel bir şey yapmadan yapar. Ağ, TCP bağlantısının zaman aşımına uğramasından daha kısa sürede yeniden başlar, bu nedenle TCP bağlantısı "kesintiye" devam eder, aynı geçici ağ kesintilerinde olduğu gibi.

Windows'un aynı şeyi yapmamasının tek nedeni, bir ağ arabirimi düştüğünde Windows'un özellikle TCP bağlantılarını sıfırlamasıdır. Bu, en azından tartışmalı bir şekilde, baştan sona yapılan bir şeydir, çünkü TCP, geçici olarak geçici ağ kesintilerinden kurtulmak için özel olarak tasarlanmıştır.


1
David, o zaman TCP / IP yığınının yeniden başlatılmadığı anlamına geliyor, değil mi? Çünkü öyle olsaydı, sunucu SSH soketinin izini kaybederdi ve sshd alt süreci (Nils sayesinde) sona erecekti. Bir sonraki soruyu hangisi getiriyor: Hangi servisler soketleri yönetiyor? TIA.
Serge Wautier

@David Schwartz - zaman aşımını değiştirmek için hangi parametreleri kullanabilirim? Geçerli zaman aşımı değerini nasıl bulabilirim? Ve sunucu tarafında mı yoksa istemci tarafında mı yapılandırıldı?
Martin Vegter

@MartinVegter TCP bağlantısının zamanlama parametrelerini değiştirmek istemezsiniz, çünkü her iki tarafta da koordine etmek zorundadırlar ve onlarla uğraşmak TCP'nin paket kaybını yönetme yeteneğini etkileyebilir. Bağlantıyı kurtararak TCP bağlantı kaybını sorunsuz bir şekilde tolere etmek için sistemi bir bütün olarak tasarlamaktan daha iyidir.
David Schwartz

11

SSHD, bağlantıda bir çocuk işlemi önerir. Bu alt süreç, ya SSHD ya da tüm ağ yeniden başlatıldığında ölmeyecek. Bu yüzden ssh ve / veya konfigürasyonunu güncelleyebiliyorsunuz service sshd restart, eski ayarlarla eski ssh oturumunuza bağlı kalmaya devam ediyorsunuz. Bunun dışında ssh küçük ağ kesintilerinden iyi bir şekilde kurtulur.


2
SSH, David Schwartz tarafından verilen nedenlerden dolayı 'küçük ağ kesintileri' hakkında bir şey bilmiyor . Özellikle SSH'nin bir malı değil.
user207421

Ssh tarafında da biraz programlama yapılmadığından emin değilim. Temel olarak, tüm TCP servisleri hataya dayanıklı olmalıdır - çoğu değildir. Uygulamaya dahil olan ilave bir yeniden deneme mekanizması olması gerekir - o zaman hizmet "orta" kesintilerde bile yaşayabilir.
Nils,

3
EJP tarafından açıklandığı gibi, cevabınız doğru ama ilgisiz.
Gilles

3
Bu cevap benim için yararlı oldu çünkü sshdaşağı inmekten kaçınmak için neler yapacağı hakkında bir fikir verdi service sshd restart. Güncellediğinizde sshd(güvenlik güncellemesi vb.), Alt işlemler yine de orijinal kodda çalışıyor olabilir (güncelleme öncesi), ancak kesintiye uğramak yerine hizmet vermeye devam eder. Sanırım ana sshdişlem için dinleme soketinin mevcudiyeti çok kısa bir süre kesiliyor, ancak ilk çocuk işlemi sona erdiğinde ve ağ arayüzü geçici olarak bağlantı noktasını kapalı olarak gösterdiğinde.
allquixotic

1
@ Nils bunu yazdığını biliyorum. Ancak bu ortalama okuyucuyu çatallaşmanın alakalı olduğunu düşünerek yapar. Fakat aynı şey çatallanmayan programlar için de geçerli. Cevabınız şöyle bir şey: "Çünkü çelik demirden daha güçlü, elmalar kırmızıdır"
Daniel Alder
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.