2016-08-26 1 views
2

Моя конфигурация:Как устранить проблемы с «Соединение SSH было неожиданно закрыто удаленным концом»?

  • выделенный сервер (Ubuntu 16.04 LTS) используется для Jenkins (2.7.1) только
  • над рабочих мест 100+ Дженкинс, каждый призывающие бродячие экземпляры в AWS (Vagrantfile)
  • каждое задание (сценарий предоставления) может занять 1-2 часа,
  • Большинство конфигурационных файлов сервера (например, SSH) имеют конфигурацию по умолчанию.

При запуске нескольких экземпляров Дженкинс в то же время, они, скорее всего, потерпит неудачу с этой ошибкой:

00:00:00.774 + vagrant up --no-provision --destroy-on-error --provider=aws 
00:00:09.635 Bringing machine 'MT-aws' up with 'aws' provider... 
... 
00:01:16.498  MT-aws: Running: inline script 
... 
00:01:26.415 ==> MT-aws: + echo 
00:01:26.415 ==> MT-aws: + sleep 20 
00:01:26.427 The SSH connection was unexpectedly closed by the remote end. This 
00:01:26.427 usually indicates that SSH within the guest machine was unable to 
00:01:26.427 properly start up. Please boot the VM in GUI mode to check whether 
00:01:26.427 it is booting properly. 
00:01:26.625 Build step 'Execute shell' marked build as failure 

Факты:

  • сценарий инициализации терпит неудачу в случайных местах (нет конкретного кода перед сбоем),
  • сервер не перегружен и имеет большое количество свободной оперативной памяти и доступ к сети Gbit,
  • больше рабочих мест я бегу параллельно, они имеют больше шансов на провал,
  • повторный запуск ту же работу, как правило, индивидуально работает отлично,
  • настройки по умолчанию в /etc/ssh/ssh_config, не ~/.ssh/config для Дженкинса.

Как я могу исправить вышеуказанную проблему с SSH быть неожиданно закрыто?

Должен ли я увеличить некоторые тайм-ауты SSH или что-то еще?

ответ

2

Откройте /etc/ssh/sshd_config файл:

# vi /etc/ssh/sshd_config 

Изменить настройки следующим образом:

ClientAliveInterval 30 
ClientAliveCountMax 5 

Где

ClientAliveInterval: Sets a timeout interval in seconds (30) after which if no data has been received from the client, sshd will send a message through the encrypted channel to request a response from the client. The default is 0, indicating that these messages will not be sent to the client. This option applies to protocol version 2 only.

ClientAliveCountMax: Sets the number of client alive messages (5) which may be sent without sshd receiving any messages back from the client. If this threshold is reached while client alive messages are being sent, sshd will disconnect the client, terminating the session.

Закрыть и сохранить файл, а затем перезапустить sshd, например:

# /etc/init.d/ssh restart 

или:

# service sshd restart 

Другой вариант включить ServerAliveInterval в клиента (рабочей станции) ssh_config файл, например

# vi /etc/ssh/ssh_config 

Затем добавить/изменить значения следующим образом:

ServerAliveInterval 30 
ServerAliveCountMax 5 

Где,

ServerAliveInterval: Sets a timeout interval in seconds after which if no data has been received from the server, ssh will send a message through the encrypted channel to request a response from the server.

В приведенном выше примере, ServerAliveInterval установлен в 15 и ServerAliveCountMax оставляют на 3, если сервер перестает отвечать на запросы, ssh отключается примерно через 45 секунд. Опять же этот параметр применяется только к протоколу версии 2.

0

Другой способ, предложенный Chris Roberts, заключается в добавлении строки SSH keep_alive на номер Vagrantfile, например.

config.vm.ssh.keep_alive = true 

По умолчанию SSH keep-alive пакеты будут отправлять каждые 5 секунд, чтобы поддерживать связь.

Дополнительную информацию см. По адресу: config.ssh related settings.

Смежные вопросы