Jak mohu vyjít z ssh, když se zablokuje?

345

Chci často do schránky doma ze školy, ale obvykle když měřím hodiny a počítač se zastaví, potrubí bude přerušeno. Však ssh jednoduše zámku - Ctrl + c , Ctrl + z a Ctrl + d nemají žádný účinek.

Je nepříjemné, že musím restartovat můj terminál a ještě otravnější, že musím zavřít a znovu vytvořit nové okno.

Takže moje otázka, je snadný způsob, jak správně ssh umřít (tj. když potrubí selže "za normálních okolností", vyjede se zprávou o rozbité trubce)? Nebo musím zjistit, co je to PID a ručně ho zabít?

    
dané Wayne Werner 11.03.2011 17:22

3 odpovědi

480

Normální klávesy jsou přesměrovány na relacissh, takže žádný z nich nebude fungovat. Místo toho použijte escape sekvence. Chcete-li zablokovat aktuální relaci, stiskněte Enter ↵ , ~ , .

Více z těchto únikových sekvencí může být uvedeno pomocí Enter ↵ , ~ , ?

Supported escape sequences:
  ~.  - terminate session
  ~B  - send a BREAK to the remote system
  ~R  - Request rekey (SSH protocol 2 only)
  ~#  - list forwarded connections
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

Seznam únikových sekvencí můžete zavřít stisknutím klávesy zadat .

Všimněte si, že když stisknete tlačítko ~ ~ způsobíssh odeslání~ namísto jeho zachycení, můžete adresu N < ssh připojení stisknutím ~ N . (To platí pouze pro ~ s, které přímo následují enter .) To znamená, že enter kbd> ~ ~ ~ . ukončí relacissh ostatní 4 neporušené.

    
odpověděl geekosaur 11.03.2011 18:18
51

Můžete také nastavit keep-alives na úrovni aplikace pro SSH, aby zabránil zmrazení v souvislosti s problémy s připojením. Moje~/.ssh/config obsahuje toto:

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

Tím je klient ssh odesílán na úrovni aplikací každých 15 sekund. Kdykoli tři z nich selhávají postupně (výchozí hodnotaServerAliveCountMax), klient považuje spojení za zavěšené a zavře.

Oproti jiné možnostiTCPKeepAlive je toto zaškrtnuto v šifrovaném kanálu a není spoofable.

Je třeba poznamenat, že i ti, kteří udržují život, také pomáhají udržet spojení s dlouhými volnoběžkami , tj. zabránit tomu, abyste měli částečně zavřeno tcp relace visí na nedotčené hodiny.

Důrazně doporučuji, abyste tuto funkci zapnuli, pokud k tomu dochází pravidelně, ale měli byste také vědět o mírném bezpečnostním riziku, které může uložit. známý útok bez odkazu může být snazší, pokud útočník zná interval a obsah nečinného připojení. Mohou to být důvody, proč není ve výchozím nastavení povoleno.

    
odpověděl ulidtko 11.03.2011 19:51
39

Jak je uvedeno v odpovědi geekosauru, sekvence escape~. ukončí připojení.

Úplný seznam únikových sekvencí a toho, co dělají, lze zobrazit zadáním~?:

Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)
    
odpověděl scottl 15.03.2011 07:39