SSH oturumunu canlı tut [kapalı]


241

ssh -p8520 username@remote_hostUzak sunucuda oturum açmak için kullanıyorum .

Sorun :

İşyerinde olduğumda daima bağlı ve düzgün çalışıyor. Ne yazık ki, uzak sunucuya evden bağlandıktan sonra terminal 10-15 dakika içinde donuyor.

Konsolda hata / zaman aşımı raporu yok, ancak imleç artık taşınamıyor.

wGiriş kullanıcılarını kontrol etmek için girdiğinizde , bazı zombiler giriş kullanıcıları var ve onları manuel olarak öldürmem gerekiyor.

Bu oldukça can sıkıcı. Biri bana yardım edebilir mi?


Ben de aldım, kullanmaya başladım screen. Belki bu bir tür zaman aşımı meselesidir.
martin

@martin screen, programın çalışmaya devam etmesine yardımcı olur. Ne yazık ki bazen uzak sunucuda çalışmak zorundayım :(
Haifeng Zhang

Parametresiz başlatırsanız, bu size bir kabuk verir.
martin

screenSadece sözün mü? Kayıp bağlantı sorununu çözebilir mi? Hayır screen -S screenName? Her zaman -Sve ile ekranı kullanıyorum-r
Haifeng Zhang

1
Hayır, bu sorunu çözmez, sadece terminaldeki işinizi kaybetmekten kaçınırsınız. Hiçbir şey yapmazsanız, yine de donar, sadece başladığınız yerden devam edebilirsiniz. Yani her zaman kullanarak devam edebileceğiniz bir terminal oluşturabilirsiniz screen. Bunu zaten biliyor
martin

Yanıtlar:


450

Sunucu tarafında çalışan ssh arka plan programı (sshd), istemci sessizleşirse (yani bilgi göndermez) bağlantıyı sunucu tarafından kapatır. Bağlantı kaybını önlemek için, ssh istemcisine arada bir sunucuya yaşam sinyali göndermesini söyleyin.

Bunun yapılandırması dosyadadır $HOME/.ssh/config, yoksa dosyayı oluşturun (yapılandırma dosyası dünya tarafından okunabilir olmamalıdır, bu nedenle chmod 600 ~/.ssh/configdosyayı oluşturduktan sonra çalıştırın ). Sinyali örneğin dört dakikada bir (240 saniye) uzak ana bilgisayara göndermek için, bu yapılandırma dosyasına aşağıdakileri koyun:

Host remotehost
    HostName remotehost.com
    ServerAliveInterval 240

Tüm ana makineler için canlı tutma sinyalinin gönderilmesini etkinleştirmek için yapılandırma dosyasına aşağıdaki içeriği yerleştirin:

Host *
    ServerAliveInterval 240

24
@ user271996, neden istemci tarafı ayarı için bir arka plan programı yeniden başlatılmalı?
maxschlepzig

Yapılandırma yalnızca kullanıcı tarafından yazılabilir olmalıdır. okunabilirlik bir endişe kaynağı değildir. Yalnızca kullanıcı tarafından yazılabilir olduğundan 600'ü izin düzeyiniz olarak kullanmak iyidir.
jbruni

1
Bu yapılandırma dosyasının PC / linux kutunuzda olduğu belli değilse
zzapper

5
Ben her zaman yapılandırma adı hakkında kafam karıştı: istemci ServerAliveInterval sunucu kullanırken kullanır ClientAliveInterval . Ne dağınıklık.
19:42 de youkaichao

@youkaichao Sık sık bu karışıklık var. Bir API tasarımcısı olarak, her iki şekilde de koymamın nedenleri var. Sonuçta, en kritik olan, seçilen standardın iyi bir şekilde belgelenmesidir.
Cameron Tacklind

170

Tek seferlik bir çözüm istedim:

ssh -o ServerAliveInterval=60 myname@myhost.com

Bir takma adda depoladı:

alias sshprod='ssh -v -o ServerAliveInterval=60 myname@myhost.com'

Şimdi şöyle bağlanabilir:

me@MyMachine:~$ sshprod

12
Bu harika, ama tam olarak bir kerelik bir çözüm değil. Eğer birden fazla kez sunucusuna bağlanmak için gidiyoruz, neden olmasın Host *& ServerAliveInterval 240(veya yalnızca istersen, ana bilgisayar adını belirtin myname@myhost.com.? Bir takma ad ayarlanması hiçbir şekilde kolay görünmüyor rockymonkey555 yanıtında olduğu gibi
Lambart

8
Veya ~ / .bashrc dosyanızda yalnızca bir takma ad oluşturun:alias ssh='ssh -o ServerAliveInterval=60'
Jabba

15
"Bir kez yazmak" değil, "sadece bir kez çalışır" ifadesinde olduğu gibi "bir kez" anlamına gelir.
Jonathan Hartley

1
Evet, "tek seferlik" kelimesini "tek kullanımlık" olarak okursanız, bu işi mükemmel yapar.
philraj

Eğer bir "tek liner" setleri olduğunu istiyorsanız ServerAliveIntervaliçin 60, harika. Ancak, kullanırken bir bash takma adı kullanmak .ssh/configsadece aptalca.
Cameron Tacklind

50

Merak edenler için, @ edward-coast

Sunucu için canlı tutma özelliğini ayarlamak istiyorsanız , şunu ekleyin /etc/ssh/sshd_config:

ClientAliveInterval 60
ClientAliveCountMax 2

ClientAliveInterval : İstemciden veri alınmazsa , sshd (8), istemciden yanıt istemek için şifreli kanal üzerinden bir mesaj gönderecek saniye cinsinden zaman aşımı aralığını ayarlar.

ClientAliveCountMax : İstemciden herhangi bir ileti almadan sshd (8) olmadan gönderilebilen istemci canlı ileti sayısını (aşağıya bakın) ayarlar. İstemci canlı iletileri gönderilirken bu eşiğe ulaşılırsa, sshd istemcinin bağlantısını keserek oturumu sonlandırır.


Görünüşe göre ClientAliveInterval gibi bir "parametre" yok, sadece ServerAliveInterval, "man ssh_config" el kitabını kontrol edebilirsiniz
dtj

6
Yanlış olan budur, "man sshd_config" ifadesine istemci yapılandırmasını değil, ssh arka plan programını çalıştıran sunucu bölümünü arayın.
Jeff Davenport

Ben kullanmalı mıyım ClientAliveIntervalhayatta istemci için sunucu kontrolünü sağlamak için, veya i istemci "ping" ile sunucu izin vermeli ServerAliveIntervaldefalarca? Her ikisi de anlamsız görünüyor
qrtLs

1
ClientAliveIntervalSunucuda yalnızca sunucunun yanıt vermeyen ölü bağlantıların bağlantısını kesmesini istiyorsanız ayarlayın ve bunun ne sıklıkta ve ne zaman olacağını özelleştirebilirsiniz.
Jeff Davenport


10

Aşağıdaki Global yapılandırmalara sahip olarak ssh bağlantımızı canlı tutabiliriz

Aşağıdaki satırı /etc/ssh/ssh_configdosyaya ekleyin :

ServerAliveInterval 60

Bu sadece istemci için mi yoksa sshd için de mi çalışıyor?
Edward Coast

1
@EdwardCoast İstemci makinede çalışır. Mac'te test ettim
minhas23
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.