Tünel ayakta, fazladan bir terminal kapatıyorsunuz ve istemcide tek bir tuşa basılmadan VPN düşüyor. Linux AnyConnect istemcisinde bildirilen neden yönlendirme değil oturum muhasebesidir: istemci tünel kalkarken hangi oturum açma oturumlarının bulunduğunu kaydeder ve bunlardan herhangi birinin sona ermesini tüneli yıkmak için gerekçe sayar. Aşağıdaki denetimler sırayla yürür ve ilk başarısız olan, bu davranışa bakıp bakmadığınızı söyler. İstemcinin olağan çıktısında terminalden hiç söz edilmez, bu yüzden ilk dürtü olan yoğunlaştırıcıyı suçlamak genellikle boşa emektir.

Sistem dosyalarını düzenleyerek başlamayın. Her adım ya düşüşü açıklar ya bir adayı eler, ucuz adımlar önce gelir.

Oturum düşüşünü alt katman düşüşünden ayırın

Bağlantı kesildikten hemen sonra yeniden bağlanın. Aynı ağda, yeni kimlik bilgisi olmadan saniyeler içinde geri gelen tünel, ölü bir yukarı bağlantı, Wi-Fi dolaşımı veya yoğunlaştırıcıdaki boşta kalma süresi değil, kapanan oturum gibi yerel bir tetikleyici gösterir. Connecting üzerinde asılı kalan ya da ağı değiştirene kadar başarısız olan tünel başka bir makaledir.

Tünel kalkarken neyin açık olduğunu yazın: istemciyi çalıştırdığınız terminal, varsa ikinci kabuk, grafik oturum açma ve başka makineden gelen her SSH oturumu. Bu listeye birazdan ihtiyacınız olacak ve sonraki düşüşten sonra onu bellekten yeniden kurmak güvenilir değildir.

Bağlantı anında istemcinin ne kaydettiğini kontrol edin

İstemci süreç ebeveynlerini veya terminal sahipliğini incelemez. Bağlantı anında var olan oturum açma oturumlarının kümesinin anlık görüntüsünü alır ve bu kümeyi sonra karşılaştırır; bir üye kaybolduğunda karşılaştırma başarısız olur ve tünel de onunla gider. Bu yüzden bağlandığınız pencereyi kapatmak zararsız olabilirken ilgisiz bir fazladan terminali kapatmak bağlantıyı öldürür: önemli olan o oturumun özgün kümede olup olmadığıdır. Bu bir sayım değil küme karşılaştırmasıdır, bu yüzden bir oturumu değiştirmek de birini kaybetmek kadar ölümcül olabilir.

Bir şeyi değiştirmeden önce istemcinin neler görebildiğini listeleyin:

who
w
last -n 10
sudo ls -l /run/utmp

who çıktısındaki her satır utmp içinde bir kullanıcı süreci kaydıdır. Oturumunuz iki kez görünüyorsa, biri grafik oturum açma biri terminal için, iki kayıt da bağlantı anında vardı ve ikisi de adaydır.

utmp'den yalnızca kendi kaydınızı çıkarın

Yayımlanan geçici çözüm, kullanacağınız oturumu istemci başlamadan önce utmp içinde görünmez yapar. Küçük bir C programı getutent() üzerinden geçer, ut_line değeri standart girdinin TTY'sine eşit olan kaydı bulur ve o kaydı yeniden yazar. Sıra bilinçlidir: setutent(), kaydı oku, ut_id değerini kopyala, ut_type değerini DEAD_PROCESS yap, kullanıcı ve satır alanlarını temizle, pututline() ile geri yaz, sonra endutent().

Derleyin, sonra istemciyi başlatacak kabuktan root olarak çalıştırın:

sudo ./utmpremove && /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.edu

Aracın hiçbir şey yapmadığına dair bildirimlerin çoğunu iki arıza kipi açıklar. Standart girdiye bağlı TTY üzerinde etki eder, bu yüzden terminali olmayan bir betikten veya cron işinden çalıştırmak eşleştirecek bir şey bırakmaz. Ayrıca /run/utmp sıradan kullanıcılar için yazılabilir değildir, bu yüzden root olmadan çalıştırma çıkış durumunu kontrol etmezseniz sessizce başarısız olur.

Tünelin kapanışı atlattığını doğrulayın

Mekanizmayı varsaymak yerine test edin. Saklamayı düşündüğünüz oturumdan bağlanın, ikinci bir terminal açın, ikincisini kapatın, sonra vpn state ve arayüz listesine bakarak tünelin hâlâ ayakta olduğunu doğrulayın. Tünel ayakta kalırsa tetikleyici her oturum değil belirli bir oturum türüydü ve açık kalması gereken oturumu buldunuz.

Yine düşüyorsa izlenen oturum başka yerdeydi, çoğu zaman terminalinizi doğuran grafik oturum açma, ve tek bir TTY kaydını çıkarmak işe yaramaz. Daha fazla müdahale eklemek yerine ilk adımdaki tam listeyle gözlemi yineleyin.

utmp'yi yeniden yazmak ne zaman yanlış cevaptır

utmp ortak muhasebedir, özel bir tablo değil. Hâlâ canlı bir oturumun kaydını yeniden yazmak who, w ve bazı denetim araçlarının onu eksik bildirmesine yol açar, ayrıca aynı kaydı sonra kapatan bir program tamamen başarısız olabilir. Aracı kendi oturumunuzla sınırlayın, özgün dosyanın bir kopyasını saklayın ve onu her kaydı silen bir açılış hizmetine dönüştürmeyin.

Siteniz uyumluluk için oturum muhasebesi topluyorsa bu geçici çözüm o gereksinimle çelişir ve desteklenen yanıt yamalı bir utmp değil, bir istemci sürümü veya başka bir erişim yöntemidir. Çoğu kişi için en az müdahaleci düzeltme, istemciyi gün boyu açık kalacak bir oturumdan başlatmak ve o pencereyi rahat bırakmaktır.

Kaydı kapatmadan önce tünel kalkarken istemcinin hangi oturumu izlediğini yazın. O tek satır, gizemli bir kopmayı makinedeki sıradaki kişi için yeniden üretilebilir bir koşula çevirir.

İlgili makaleler