Як я можу вийти з ssh, коли він блокується?

341

Я часто вхожу в мою коробку вдома зі школи, але, як правило, коли я змінюю заняття, а комп'ютер призупиняється, трубка буде порушена. Однак ssh просто блокує - Ctrl + c , Ctrl + z і Ctrl + d не впливає.

Прикро, що доведеться перезапустити мій термінал, і ще більше дратує, що доведеться закрити та знову створити нове вікно екрана.

Отже, моє запитання: чи є простий спосіб зробити SSH помилково правильним (наприклад, коли труба не працює "нормально", він вийде з повідомленням про зламану трубу)? Або я повинен з'ясувати, що таке PID, і вручну вбити?

    
задане Wayne Werner 11.03.2011 в 17:22
джерело

3 відповіді

475

Звичайні клавіші пересилаються через сеанс ssh , тому жоден з них не буде працювати. Замість цього використовуйте евакуаційні послідовності. Для того, щоб убити поточний сеанс, він пізніше став Введіть ↵ , ~ , . .

Більша частина цих евакуаційних послідовностей може бути вказана з Введіть ↵ , ~ , ? :

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.)

Ви можете закрити список Escape-послідовностей, натиснувши enter .

Зверніть увагу, що, оскільки натискання ~ ~ призводить ssh до відправки ~ замість перехоплення, ви можете вставити N ssh з'єднань, натискаючи ~ N разів. (Це стосується лише ~ s, які безпосередньо слідують за enter .) Тобто, enter ~ < kbd> ~ ~ ~ ~ . припиняє глибину ssh session 5 і зберігає інші 4 незмінними.

    
відповідь дана geekosaur 11.03.2011 в 18:18
джерело
51

Ви також можете налаштувати зберегти-живих на рівні програми для SSH, щоб перешкоджати закрити проблему з'єднання. Мій ~/.ssh/config містить це:

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

Це робить клієнт ssh відправленим на рівні програми на кожні 15 секунд. Кожного разу, коли три з них не послідовно (за замовчуванням ServerAliveCountMax ), клієнт вважає підключенням виклик і закриває його.

На відміну від іншого параметра TCPKeepAlive , це перевіряється в межах зашифрованого каналу і не є підробленим.

Відзначається, що ці тримачі також допомагають, зберігати зв'язки довгого холостого ходу , тобто перешкоджати вам половина закритого

Я особливо рекомендую включити цю функцію, якщо ви регулярно сповіщаєте про це, але ви також повинні знати про незначний ризик безпеки, який він може нав'язати. відомий текстовий атак може стати легшим, якщо зловмисник знає інтервал та вміст простого з'єднання. Це може бути причиною того, чому він не активований за умовчанням.

    
відповідь дана ulidtko 11.03.2011 в 19:51
джерело
39

Як зазначено у відповіді geozaur, евакуаторна послідовність ~. припинить з'єднання.

Повний список евакуаційних послідовностей і що вони можуть відображати, набравши ~? :

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.)
    
відповідь дана scottl 15.03.2011 в 07:39
джерело

Ознайомтеся з іншими питаннями з міткою