Bozuk bir borudan sonra ssh oturumuna nasıl yeniden bağlanabilirim?


28

Böylece apt-get upgrade, yönlendirici beni çok sinirlendirdiğinden beri çok uzun olduğuna karar verdiğinde bir sunucu üzerinde çalışıyordum : Tüm bağlantıyı kesti. Hikayenin ahlaki screenbir serseri yönlendiricisindeyken çok kullanmaktır .

Her neyse, tekrar giriş yaptım ve sürecin hala orda asılı olduğunu ve hala Y / n'imin yükselmesini beklediğimi (neyse ki henüz vurmadığını) öğrendim. Kırılmış bir oturuma yeniden bağlayabilmemin bir yolu var mı? Paket yönetiminin ortasında olmadığından öldürmeyi bitirdim, ancak ileride başvurmak için çok iyi olurdu.


1
apt-getSürecin hala devam etmesine şaşırdım . Tüm işlem zinciri ile birlikte SSH'ye kadar ölmüş olmalıydı. Bunun do-dist-upgradeotomatik olarak screen/ byobuoturumunda başladığını fark ettim : belki bazı durumlarda apt-getaynı mı?
nfirvine

Yanıtlar:


16

Doğru sorunuzun cevabı şudur: yapamazsınız . Bence asıl sorun kimlik doğrulama prosedürlerinin senkronize edilmemesi. Sadece bu şekilde çalışmıyor.

Fark ettiğiniz gibi, çözüm mümkün olduğunda ekranı kullanmaktır (bu arada, tmux ekrana bir alternatiftir).


1
Peki ya şifresiz ssh'niz varsa? O zaman yapabilir misin?
Sridhar Sarnobat

1
byobuön ucu screen(veya tmux) kullanmak kesinlikle güzel, daha kolay - kesinlikle göz atmaya değer (:
drevicko

Sridhar-Samobol, kimlik doğrulama işleminin hala yapılması gerekiyor. Çalışan bir oturuma bağlanmanın ilk el sıkışmayı tekrar yapmasının bir yolu yoktur, bu yüzden mevcut bir oturumda yeni bir oturum başlatırsak değişmezler kırılır. Cevap: hayır.
kevr

9

Uzun ömürlü işlemler yürütmek için daha kolay bir arayüz istiyorsanız , ekranı veya byobu kullanıyorum .

Ekran için şunları kullanabilirsiniz:

screen [program] [args]

Bu, bir ekran oturumu içerisinde [program] ve [args] 'ı çalıştıracaktır . Program bittiğinde, oturum otomatik olarak kapanır. Programınız çalıştıktan sonra oturumu korumak istiyorsanız, sadece herhangi bir argüman olmadan ekranı çalıştırın ve oturumun içinde yeni bir komut istemi görünecektir. CTRL + A + D terminali geçerli oturumdan ayırır.

Önceki bir oturuma tekrar eklemek için:

screen -r

Açık olan sadece bir oturum varsa, hemen tekrar bağlanır. Birden fazla oturum devam ediyorsa, hangisine eklemek istediğinizi soracaktır. Oturum adını biliyorsanız, bu komut satırına argüman olarak ekleyebilirsiniz.

Byobu güzel bir gelişmedir. Ekrana dayalıdır , ancak alt kısımda mevcut tüm oturumları sekme olarak gösteren ve bu hareketler için daha kolay kısayollar sağlayan bir çubuk sağlar. Yapabilirsin:

  • F2 yeni bir oturum başlatmak
  • F3 soldaki bir sonraki oturum sekmesine geçme
  • F4 sağdaki sonraki oturum sekmesine git
  • F8 geçerli oturum sekmesine kolay bir ad verir
  • F9 bir seçenekler menüsü açar
  • CTRL + A + D tüm oturumları terminalden ayırır.

TAVSİYE WORD : kullanıcı kökü ile bir oturum açık bırakmaktan kaçının . Herhangi biri terminalinize erişirse (yerel olarak veya uzaktan), devam eden bir oturuma kolayca yeniden bağlanabilir ve sisteminizi root olarak kullanabilir. Gerekirse, gerektiği gibi ortak bir kullanıcı ve sudo kişisel komut satırı kullanarak bir oturum başlatmak en iyisidir .


1
OP'den alıntı yapabilir miyim: "Hikayenin ahlaki ekranı çok kullanmaktır ". Görünüşe göre burada soru bu değildi.
Ocak

Yazdığınız için teşekkürler ama Ocak doğruydu.

Bir ekranı kök olarak ayarlamak için sudo screen <command> komutunu kullanın, bu ekrana yeniden bağlanmak için sudo erişimi gerekir. Normalde bir ekranı başlatmaktan çok daha iyidir, daha sonra bunun içinde kök olarak değişir.
djsmiley2k - CoW,

8

Bozuk bir SSH oturumuna yeniden bağlanamıyor olsanız da, SSH içinde çalışan işlemi işlevsel olarak istediğinize eşdeğer bir şekilde geri alabilirsiniz.

Talimatlar

Senin durumunda, yeni bir SSH oturumundan, oturumundan veya benzeri şeylerden apt-getkontrol edilmek üzere süreci devralacaktın . Bunun için en sevdiğim komut buydu:screenreptyr

$ sudo apt-get install reptyr
$ ps ax | grep apt-get
10626 pts/8   R+     0:32 apt-get upgrade

Ardından, işleminiz için bulduğunuz yardımla:

$ sudo reptyr -T 10626

Veya bu işe yaramazsa, şunu deneyin:

$ reptyr 10626

Bu aşamadan sonra, tüm klavye girişiniz üstlendiğiniz programa gider. Maalesef sizden apt-getonay isteyen çıkış gibi SSH oturumunun eski çıktısını görmeyeceksiniz .

açıklamalar

Temelde aynı reptyr(yani, ptracehata ayıklama eki ile) aynı çalışan birden çok araç vardır . Aşağıdaki sorulara ve cevapların tartışıldığı yerlere bakın:

Yukarıdaki talimatlarda, reptyr 10626kullanımları ptracesırasında ayıklama bağlanma sudo reptyr -T 10626komutu TTY çalmak kullanır ve tercih edilen (olup detayları ).

Son olarak, bir nedeni bu şekilde bir SSH oturumu boyunca alamaz nedeni sshdsüreci bir konak terminali tarafından kontrol edilmeyen, bunun yerine sağlayan bir - bir terminal köle bölümünü ptscihazının - Ana bölüm içinde bulunduğu kontrol ederken İstemci makinesi, aralarında parçalanmış bir SSH oturumu ile burada. Böyle bir sshdişlemi üstlenmeye zorladığınızda reptyr -s <pid>, klavye girişiniz aktif alt işlemine değil, bu işleme gider. Yani bir "Ctrl + Z" basitçe onu öldürür sshd.


1

Bu do-dist-upgradeyüzden askıya alınan bir dizüstü bilgisayardan ssh ile yapıyordum Broken pipe. Makineye geri döndüğümde, yükseltme ile ilgili süreçlerin hala çalıştığını görüyordum, aralarında whiptailbenden giriş talep etmeyi (hangi ekran yöneticisini seçeceğini) ve ilgili olarak bir köke sahipti SCREEN. Yapmam başardı sudo su -ve screen -roturum ve, bak şu işe eklemek için, ben girdi alabilecek önümde whiptail diyalog var. Yükseltmeye sorunsuz bir şekilde devam edebildim.

Not: Bu Ubuntu 14.04'ten 16.04'e yükseltme yapıldı.

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.