Autossh tüneli nasıl durdurulur / öldürülür?


17

Artık otomatik bir tünele sahibim, onu durdurmanın doğru yolu nedir?

Bunu yapmanın kolay bir yolu yok gibi görünüyor. Bu bölümdeki belgeler net değil.

Makinenin yeniden başlatılması kolay bir yol mu? Bu doğru mu?

Yanıtlar:


21

Hayır, öldürmenin doğru yolu autosshsadece süreci öldürmektir, autosshbaşka bir şey değildir.

Sebebi

# file $(which autossh)
/usr/bin/autossh: POSIX shell script, ASCII text executable

bu autosshsadece bir kabuk betiğidir, bir hizmet değil . Son satırında yeni bir program başlatır,

exec /usr/lib/autossh/autossh "$@"

yine bir hizmet değil. Gelince exec( Bash korsanlarının wiki'sinde iki kez kontrol edebilirsiniz ), /usr/lib/autossh/autossh "$@"yeni bir işlem başlatmadan mevcut kabuğu aşağıdaki komutla ( bu durumda) değiştiren bir kabuk yerleşik komutudur . Yani, durmanın tek yolu autossh, örneğin, çağrı yapan komut dosyasını öldürmektir.

pkill -3 autossh

( -3 bayrağını kullanmanın önemine dikkat çektiği için dviljoen sayesinde , aşağıya bakın). Bu arada, bağlantıyı öldürmek işe yaramaz, çünkü çağrı komutu ( yani , yukarıdaki), eskisinin bırakıldığını fark ettiği anda yeni bir bağlantı başlatır. ssh


1
Aslında otopsiyi -9 olmadan öldürmelisin. Tünelden daha önce bir bağlantı yapılmışsa, bununla başa çıkmak için bir çocuk sshd süreci ortaya çıkmış olacaktır. Üst otomatik otomağı -9 ile öldürmek sshd işlemini geride bırakacaktır. Tünel, sshd işlemi zaman aşımına uğrayana kadar çalışmaya devam edecektir. Öldürme sırasında varsayılan sinyali (-3) kullanırsanız, bu yavaşça kapanacak ve ortaya çıkan sshd işlemini onunla alacaktır.
dviljoen

merhaba -3 varsayılan öldürme sinyali olduğu için, aslında açıkça -3 geçmesine gerek yok, bunu atlayabilirsiniz
Andrés Alcarraz

@ AndrésAlcarraz Gerçekten emin misin? SIGTERMvarsayılan değerdir ve bu değerdir 15. SIGQUITolduğunu 3görmek superuser.com/questions/352147/what-does-kill-3-mean ve en.wikipedia.org/wiki/Kill_(command) - Ayrıca, FWIW, ben sadece kontrol edilmiş ve -15bunu kapatılmıyor, bu yüzden SIGTERMkullanılamaz.
Daniel F

Ve kullanarak pkillbir sinyal (= default) de sona etmez autossh.
Daniel F

@DanielF haklısın, dvijoen yorumundan "varsayılan sinyal (-3)" ile karıştırıldım
Andrés Alcarraz

5

auto ssh uygulamasını şununla çalıştır:

AUTOSSH_PIDFILE=/var/run/tunnel.pid autossh

öldürmek:

kill pid

BTW

pkill -9 autossh yanlış

-9sürecin zarifçe çıkmamasını sağlar, bu yüzden sshsüreç autosshöldürüldüğünde süreç hala oradadır

olmadan -9hala kötü, birden fazla tünel varsa, pkillhepsini öldürecek

AUTOSSH_PIDFILEenv var değerini killsadece bu pid'den sonra ayarlamaktır


Süper Kullanıcıya Hoşgeldiniz. Görünüşe göre, son paragrafınız gerçek cevabınız iken, sorunuzun geri kalanı başka bir cevaba ilişkin bir yorumdur . Bu sitenin Soru-Cevap doğası göz önüne alındığında, yanıtınıza kendi başına durabilmesi için yeterli ayrıntı eklemek yararlı olacaktır. Katkınız için teşekkür ederiz ve tura göz atmayı unutmayın .
Ben Reinstate Monica diyorum

4

Süreci arayın:

ps aux | grep ssh

Secon sütunu PID numarasıdır

PID ile öldürme işlemi :)

kill -9 PIDnumber

Kök ayrıcalıklarına sahip değilseniz sudo kullanın .


1

Bunun cevaplandığını biliyorum, ancak yukarıdaki yorumların aksine pkill -3 autossh, sshd çocuk süreçlerini benim için KULLANMAYIN.

Bu işlevi .bashrcdosyamda kullanıyorum.
Temel olarak, autossh'a bir --killargüman eklemek gibi .

  if [ "$1" = "--kill" ]; then
    ps aux | 
    grep -P "(/usr/bin/ssh|/usr/lib/autossh/autossh)\s.*$2" |
    awk '{print $2}' |
    xargs -r kill
  else
    $(which autossh) "$@"
    echo "" # prevents line wrapping when you kill the ssh process
  fi

Sisteminizdeki yolları çalıştırabilir which sshve which autosshkontrol edebilirsiniz.

İlk argüman olmadığı sürece, argümanları --killautossh'a iletir.

Bu komut dosyası autossh & ssh örneklerini öldürür. Bağlantı noktası iletme kullanıyorsanız bu önemlidir, çünkü YALNIZCA autossh örneğini öldürmek tüneli öldürmez, sadece sonunda bağlantıyı kesip kesmediği / ne zaman yeniden bağlanmasını engeller.

Ayrıca yalnızca belirli tünelleri öldürmek için bir arama terimi (ana bilgisayar adı) belirleyebilirsiniz.

autossh --kill dbserver1sadece dbserver1 bağlantılarını
autossh --kill dbserveröldürür dbserver1, dbserver2, vb. TÜM otozsh bağlantılarını
autossh --kill dbserveröldürür

Açıklığa kavuşturmak için, yalnızca autossh tarafından başlatılan SSH oturumlarını öldürmelidir.

Eğer çalıştırırsanız ps aux | grep sshsize autossh ve SSH oturumları hem çalışan varken, hangilerinin autossh kullanımı ile tam yolunu (/ usr / bin / ssh ve / usr / lib / autossh / autossh) başladığını göreceksiniz.
Bu komut dosyası yalnızca sonuçları speicifc yolu ile başlatılan işlemlerle eşleştirir. Bunu yaptım, çünkü ben (ve çoğu insanın) genellikle sshtam yolu değil, tam yolu yazıyorum, bu da normal ssh oturumlarımı öldürmesini engelliyor.

Umarım bu başkalarına yardım eder.


$(which autossh)sadece yerine özel bir neden autossh?
MestreLion
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.