зависає термінал, коли втрачено з'єднання і ssh увімкнено


18

коли я сшу на сервер через Інтернет на вкладці терміналу gnome, якщо я втратив з'єднання з Інтернетом, вкладка термінала буде висіти і не прийме жодного вводу. Чому воно висить?

Чи є якийсь спосіб активувати вкладку терміналу, тобто змусити його продовжувати виконувати процес локальної оболонки?

Чи єдиний спосіб закрити вкладку терміналу?

Відповіді:


20

SSH з'єднання йде вниз автоматично по закінченні певного періоду часу , встановленого ClientAliveIntervalі ClientAliveCountMaxпараметрів і їх стороні клієнта еквіваленти. Якщо ці очікування досить великі, ви відчуєте застиглу оболонку. Однак, якщо ви використовуєте, OpenSSHвам не доведеться чекати тайм-ауту, і ви можете змусити закрити з'єднання за допомогою символів втечі :

ESCAPE CHARACTERS
When a pseudo-terminal has been requested, ssh supports a number
of functions through the use of an escape character.  A single
tilde character can be sent as ~~ or by following the tilde by a
character other than those described below. The escape character
must always follow a newline to be interpreted as special. The
escape character can be changed in configuration files using the
EscapeChar configuration directive or on the command line by the
-e option.
The supported escapes (assuming the default ‘~’) are:

~.
    Disconnect.
(...)

Коли з'єднання замерзає, натисніть ~(це означає Shift+ `клавіші разом), відпустіть його та натисніть .. Крім того, якщо ви працюєте з нестабільним з’єднанням або вам потрібно підключитися до віддаленого сервера весь час, ви можете використовувати автошшш, щоб автоматично відновити втрачене з'єднання, це дуже зручно.

Редагувати :

Однак якщо обидва ClientAliveIntervalі ServerAliveIntervalвстановлено явно 0 або не встановлено явно, а потім встановлено 0 за замовчуванням відповідно до sshd_configта ssh_configвказівок, параметри тайм-ауту встановлюються в наступних файлах (з http://tldp.org/HOWTO/TCP- Keepalive-HOWTO / usingkeepalive.html ):

  # cat /proc/sys/net/ipv4/tcp_keepalive_time
  7200

  # cat /proc/sys/net/ipv4/tcp_keepalive_intvl
  75

  # cat /proc/sys/net/ipv4/tcp_keepalive_probes
  9

  The first two parameters are expressed in seconds, and the last is
  the pure number. This means that the keepalive routines wait for
  two hours (7200 secs) before sending the first keepalive probe,
  and then resend it every 75 seconds. If no ACK response is
  received for nine consecutive times, the connection is marked as
  broken.

Ви можете змінити ці 3 файли, просто скориставшись echoі переконавшись, що заморожений сеанс SSH відключений відповідно до цих значень.


6
Я хотів би додати, що ssh розпізнає лише свій символ втечі спочатку або після Enter. Коли ssh-з'єднання застрягає, Enter часто, але не завжди є останнім символом, який ви натискали раніше. Тому, мабуть, краще звикнути до Enter ~ .послідовності, яка припиняє з'єднання.
egmont

Спасибі. Мені все ще не зрозуміло, як /proc/sys/net/ipv4/tcp_keepalive*файли ClientAliveIntervalта ServerAliveInterval працюють разом? Чи всі вони для одних і тих же налаштувань, тобто підтримувати ssh-з'єднання в живих? Чи є колишні файли не лише для ssh-з'єднань, але й інших TCP-з'єднань?
StackExchange для всіх

Ще одне питання: чому "Якщо ці очікування досить великі, ви відчуєте застиглу оболонку". Що ви маєте на увазі під термінами "досить невисокі"? Чи не завжди оболонка заморожується, якщо недостатня активність протягом зазначеного періоду часу? або ти маєш на увазі, що в деяких випадках недостатньої активності оболонка не заморожується, а автоматично виходить?
StackExchange для всіх

@Tim: 1. /proc/sys/net/ipv4/tcp_keepalive*не тільки для, ssh(d)але, як сказано в документі, до якого я Remember that keepalive support, even if configured in the kernel, is not the default behavior in Linux. Programs must request keepalive control for their sockets using the setsockopt interface. There are relatively few programs implementing keepalive, but you can easily add keepalive support for most of them following the instructions explained later in this document.
посилався

@Tim: 2. Досить висока, наприклад, 2 години - вам доведеться почекати 2 години, перш ніж сеанс буде відключений. Зробіть тест - підключіться до віддаленого хоста, убийте sshdна пульті або вийміть кабель і перевірте, коли заморожений ssh сеанс завершиться сам. До frozen shellI середньої оболонки , яка є неактивним, не приймає ніяких ключів і нічого не друкує.
Аркадіуш Драбчик
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.