2011-08-26 16 views
42

Jestem w stanie wydawać komendy do moich instancji EC2 za pośrednictwem SSH, a te komendy rejestrują odpowiedzi, które powinienem oglądać przez długi czas. Złe jest to, że polecenie SSH jest po pewnym czasie zamknięte z powodu mojej nieaktywności i nie jestem już w stanie zobaczyć, co się dzieje z moimi wystąpieniami.Czas nieaktywności ssh Amazon EC2 z powodu braku aktywności

Jak mogę wyłączyć/zwiększyć limit czasu na komputerach z systemem Amazon Linux?

Błąd wygląda następująco:

Read from remote host ec2-50-17-48-222.compute-1.amazonaws.com: Connection reset by peer

Odpowiedz

9

Rozważ skorzystanie z screen lub byobu, a problem prawdopodobnie zniknie. Co więcej, nawet jeśli połączenie zostanie utracone, możesz ponownie połączyć się i przywrócić dostęp do tego samego ekranu terminalu, co wcześniej, przez screen -r lub byobu -r.

byobu to ulepszenie ekranu i ma wspaniały zestaw opcji, takich jak szacunkowe koszty EC2.

+0

Czy istnieje dobry samouczek dla każdego z nich? Wygląda na to, że nie instaluje się na komputerach EC2, a z tego, co przeczytałem, masz je uruchomić na serwerze. –

+2

Preferuję "ServerAliveInterval @ brandnewcode", poniżej. Używam tmux, który jest podobny do ekranu. Niezamierzoną korzyścią tmux jest zegar na pasku stanu, który aktualizuje się co minutę, utrzymując połączenie otwarte. tl; dr: 'tmux', aby rozpocząć sesję, i' tmux a', aby ponownie dołączyć. – dannyman

+5

To nie powinno być oznaczone jako poprawna odpowiedź, ponieważ odpowiada na inne pytanie. –

-6

Mam ponad 10 niestandardowych AMI opartych na AMI Amazon Linuksa i nigdy nie napotkam żadnych problemów z przekroczeniem limitu czasu z powodu braku aktywności na połączeniu SSH. Połączenia były otwarte dłużej niż 24 godziny, bez uruchamiania jednego polecenia. Nie sądzę, że w AMI Amazon Linux są jakieś limity czasu.

+0

Czy wiesz, dlaczego otrzymuję ten błąd? – Roberto

+0

Wydaje mi się, że wystarczy powiedzieć, że coraz więcej osób korzysta z limitów czasu, a jedną z przyczyn, dla których nie osiągnięto limitu czasu, jest ustawienie klienta dla ssh, który od czasu do czasu wysyła polecenie zdalnego rozłączenia/zresetuj występowanie w połączeniach. – Jim

26

Zakładając, że wystąpienie Amazon EC2 jest systemem Linux (i bardzo prawdopodobny przypadek, że używasz SSH-2, a nie 1), następujące powinny działać bardzo grzejniku:

  1. Remote do instancji EC2.

    ssh -i <YOUR_PRIVATE_KEY_FILE>.pem <INTERNET_ADDRESS_OF_YOUR_INSTANCE> 
    
  2. Dodaj "client-alive" dyrektywy do pliku konfiguracyjnego serwera SSH na instancji.

    echo 'ClientAliveInterval 60' | sudo tee --append /etc/ssh/sshd_config 
    
  3. Uruchom ponownie lub ponownie załaduj serwer SSH, aby rozpoznał zmianę konfiguracji.

    • Polecenie za to na Ubuntu byłoby ..

      sudo service ssh restart 
      
    • Na każdy inny Linux, chociaż po to prawdopodobnie poprawne ..

      sudo service sshd restart 
      
  4. Di sconnect.

    logout 
    

Następnym razem, kiedy zalogować się na tej instancji EC2, te super-irytujących zawiesza częste połączenia/limity czasu/krople powinny zniknąć z nadzieją.

Pomaga to również w przypadku instancji Google Compute Engine, które mają podobnie denerwujące ustawienia domyślne.

Ostrzeżenie: Należy pamiętać, że TCPKeepAlive ustawienia (które również istnieją) są subtelnie, ale wyraźnie różnią się od ClientAlive ustawień, które proponuję powyżej, i że zmiana ustawienia TCPKeepAlive z domyślnego może faktycznie boli sytuacja, a nie pomoc.

Więcej informacji tutaj: http://man.openbsd.org/?query=sshd_config

+2

który powinien być "sudo service sshd restart", jak sądzę? – CupawnTae

+1

@CupawnTae Ahh, masz prawdopodobnie rację: OP mówi Amazon Linux w swoim pytaniu. Rzeczywiście, powinniśmy interpretować to jako odniesienie do systemu AMI opartego na platformie Amazon Linux opartego na systemie Red Hat Enterprise Linux - w którym pisownia byłaby poprawna. – naki

+0

@CupawnTae ... Używam Ubuntu na moich instancjach Amazon EC2 Linux. Jeśli ktoś używa Ubuntu, powinien napisać to tak, jak to napisałem. – naki

76

Można ustawić zachować opcję żyje w swoim pliku ~/.ssh/config na głównej reż komputera:

ServerAliveInterval 50 

Amazon AWS zwykle spada połączenia po tylko 60 sekund bezczynności, więc ta opcja będzie pingować serwer co 50 sekund i utrzymywać łączność przez czas nieokreślony.

+2

to ustawienie jest po stronie klienta, w przeciwieństwie do serwera AWS, prawda? Byłoby warto wspomnieć w odpowiedzi. Ponadto, czy jesteś pewien co do 60 sekund? Z upływem czasu zajmuje to znacznie więcej czasu. – CupawnTae

+1

Tak, jest po stronie klienta, na konfiguracji ssh na komputerze * nix. Zaktualizuję odpowiedź, dzięki! Dla mnie to właściwie 120 sekund, ale mam współpracownika, który pracuje w innym regionie, a dla niego czas oczekiwania wynosi 60 sekund. Nie pytaj mnie dlaczego, nie pracuję w Amazon! Dlatego powiedziałem "zwykle" 60 sekund. Pomyślałem, że rozsądnie polecam 50 sekund, ponieważ 1. to zadziała prawie dla wszystkich i 2. nie będzie to trashować połączenia sieciowego, to tylko ping. Możesz umieścić 10 sekund i nadal będzie wystarczająco lekki, aby nie wpaść w jakiś zakaz na serwerze. – mauriciomdea

+0

Wielkie dzięki. Ból polegał na ponownym połączeniu przez cały czas, zaraz po 1 minucie bezczynności. Pomogło mi to. –