SSH bağlantısı kesildikten sonra ekran oturumuna yeniden bağlanamıyor


16

Daha önce ile uzun süren bir ekran oturumuna yeniden bağladım screen -dr control. Ancak, bazen bu komut ekrana yeniden bağlanmaz ve bunun yerine sonsuza kadar askıda kalmaz (10 dakika sonra iptal ettim). Bu yalnızca SSH bağlantısı beklenmedik bir şekilde kesildiğinde olur ve ekran düzgün bir şekilde çıkarıldığında gerçekleşmez Ctrl-A d. Diğer anahtarlar, örneğin screen -xveya screen -D -RRçalışmıyor.

Bu yazı , ekranın bağlantısını kesen ekran oturumunu tutan PTY'yi öldürmeyi önermektedir. Ancak, sadece screen -dr controldenilen kabuğu öldürür .

Örneğin:

$ ps -ef | grep control | grep -v grep
nomad     7387  7109  0 13:05 pts/50   00:00:00 screen -dr control
nomad    15299     1  0 Nov27 ?        00:13:47 SCREEN -S control

$ ps -ef | grep bash | grep 'pts/50'
nomad     7109  7108  0 12:49 pts/50   00:00:00 -bash

Bağlantılı yazı bashişlemi PID 7109 ile öldürmeyi önerir. Bu screen -dr controlişlem aynı zamanda PID 7387 ile de süreci öldürür. Daha sonra ekrana hala bağlanamıyorum.

SCREEN -S controlEkran oturumunu başlatan işlemin initana öğesi olarak açıkçası öldüremeyeceğim.

Asılı ekran oturumuna yeniden bağlanmanın bir yolu var mı?

Güncelleme: Bu, 2.6.32-358.6.1.el6.x86_64 çekirdeği kullanılarak CentOS 6.4'te gerçekleşir. Kabukların hepsi bash 4.1.2 (1) sürümüdür.


3
screen -lsBu "asılı" durumlarda ne diyor? screen -d -r <session>"ayır ve kurtar" anlamına gelir, bu yüzden onu ilk elden ayırmamak önemli olmamalıdır. (Ve sık sık yapmak için, değil ...)
mveroone

Lsof'u ekran işlemlerinde çalıştırmayı deneyin, "sıkışmış" bir şey olup olmadığına bakın. Ekran, işlemler arasında iletişim kurmak için bir unix soketi kullanır, muhtemelen bir şey onu açık tutmuştur. Ayrıca soketin silinmediğinden veya sahipliğinin değiştiğinden emin olun. Genel olarak, hangi işletim sistemi ve sürümünü kullandığınızı da eklemelisiniz, ancak bu sefer işletim sistemine bağlı olacak özel bir şeyim yok.
Dan Pritts

3
Başka bir sekme yoluyla mı sildiniz, örneğin netcat'i proxy komutu olarak kullanma? Bu durumda, ilk kutuya ssh bağlantısının düştüğü bir sorun yaşadım, ancak netcat proxy komutu 'ikinci' ssh bağlantısını açık tutar. ancak -d çalışmalıdır.
Jens Timmerman

Jens, tavsiyen hile yaptı. Gerçekten netcat üzerinden proxy yaptım ve ara ana bilgisayarda onu öldürmek ekrana yeniden bağlamamı sağladı.
Viktor Rosenfeld

Asılı ekran komutunun üst sürecini neden öldürmek istersiniz? Ekleme ekranı komutunun kendisini öldürmek istiyorsunuz. # 7387 senin durumunda.
Matthias Urlichs

Yanıtlar:


6

bence denemelisin

screen -DR 

bir dahaki sefere - kızgın (büyük harf) çağırma, onu ara netcat hop'unuz tarafından yapılan diğer oturumun bağlantısını kesmeye zorlamalıdır.


Bunu denedim, işe yaramıyor. Netcat proxy'sini öldürmek hile yapar.
Viktor Rosenfeld

Garip. Olması gerekiyor. Bunun yerine ne olur?
Matthias Urlichs

Ekranın (-dr, -x, -DR) diğer tüm çağrıları sonsuza kadar bekler. Netcat proxy'sini öldürdüğümde, bu çağrılar tekrar işe yarıyor.
Viktor Rosenfeld

1

Jens Timmerman tarafından önerildiği gibi, bu garip davranışın nihai nedeni SSH ProxyCommand ve kullanarak uzak sunucuya bağlanmak oldu ncat. ncatAra makineyi öldürdükten sonra ekran oturumuna yeniden bağlanabiliyorum.


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.