Что я могу сделать, чтобы настроить SSH на обоих клиентах и серверах, чтобы предотвратить ошибки Write Failed: broken pipe? Это часто происходит, если вы спали на своем клиентском компьютере и возобновляете позже.
Я пробовал это в /etc/ssh/ssh_config для Linux и Mac:
Host *
ServerAliveInterval 120
Так часто, в секундах, он должен отправить сообщение keepalive на сервер. Если это не сработает, то тренируйте обезьяну, чтобы нажимать каждые две минуты, пока вы работаете.
Вы можете установить либо ServerAliveInterval в /etc/ssh/ssh_config клиентской машины, либо ClientAliveInterval в /etc/ssh/sshd_config серверной машины. Попробуйте уменьшить интервал, если вы все еще получаете ошибку.
Конфигурация для одного пользователя может быть установлена в файле ~/.ssh/config как на стороне сервера, так и на стороне клиента. Убедитесь, что файл имеет правильные разрешения chmod 644 ~/.ssh/config.
Я пробовал это в /etc/ssh/ssh_config для Linux и Mac:
Host *
ServerAliveInterval 120
Так часто, в секундах, он должен отправить сообщение keepalive на сервер. Если это не сработает, то тренируйте обезьяну, чтобы нажимать каждые две минуты, пока вы работаете.
Вы можете установить либо ServerAliveInterval в /etc/ssh/ssh_config клиентской машины, либо ClientAliveInterval в /etc/ssh/sshd_config серверной машины. Попробуйте уменьшить интервал, если вы все еще получаете ошибку.
Конфигурация для одного пользователя может быть установлена в файле ~/.ssh/config как на стороне сервера, так и на стороне клиента. Убедитесь, что файл имеет правильные разрешения chmod 644 ~/.ssh/config.
Я удаленно обновляю сервер Ubuntu с ясного до точного и потерял ssh-соединение в середине обновления с сообщением «Write failed. Brocken pipe». ClientAliveInterval и ServerAliveInterval ничего не сделали. Решение состоит в том, чтобы включить параметры TCPKeepAlive в клиенте ssh:
TCPKeepAlive yes
в
/etc/ssh/ssh_config
Для клиента отредактируйте файл ~/.ssh/config (или /etc/ssh/ssh_config) следующим образом:
Host *
TCPKeepAlive yes
ServerAliveInterval 120
TCPKeepAlive - указывает, должна ли система отправлять сообщения keepalive TCP на другую сторону. Если они будут отправлены, смерть соединения или сбой одной из машин будет правильно замечена. Однако это означает, что соединения будут умирать, если маршрут временно остановлен, а некоторые люди находят его раздражающим (по умолчанию «да»). ServerAliveInterval - устанавливает интервал времени ожидания в секундах, после которого, если данные не были получены с сервера, ssh (1) отправит сообщение через зашифрованный канал, чтобы запросить ответ от сервера. Значение по умолчанию равно 0, что указывает на то, что эти сообщения не будут отправляться на сервер. Для сервера отредактируйте свой /etc/ssh/sshd_config как:
ClientAliveInterval 600
ClientAliveCountMax 0
Если вы хотите, чтобы ssh-клиент автоматически покидал (тайм-аут) через 10 минут ( 600 секунд).
TCPKeepAlive - указывает, должна ли система отправлять сообщения keepalive TCP на другую сторону. Если они будут отправлены, смерть соединения или сбой одной из машин будет правильно замечена. Однако это означает, что соединения будут умирать, если маршрут временно отключен, а некоторые люди находят его раздражающим (по умолчанию «да»).
TCPKeepAlive - указывает время ожидания в секундах. Через x секунд, ssh-сервер отправит клиенту сообщение с запросом ответа. Deafult - 0 (сервер не будет отправлять сообщение клиенту для проверки).ClientAliveCountMax - указывает общее количество сообщений проверки, отправленных сервером ssh, без получения ответа от клиента ssh. Значение по умолчанию: 3.
Конфигурация клиента
Попробуйте создать файл:
~/.ssh/config
Добавить содержимое:
Host *
ServerAliveInterval 30
ServerAliveCountMax 5
Теперь ssh на ваш сервер и посмотрите, проблема исправлена. Параметр ClientAliveInterval полезен только при настройке ssh-сервера (aka sshd), он не изменяет ничего на стороне клиента ssh, поэтому не используйте его в вышеуказанном файле конфигурации.
Это отправит сигнал hello-are-you-there на сервер, если не было получено пакетов за предыдущие 30 секунд (как указано выше). Однако, если количество последовательных сигналов приветствия к вам достигнет ServerAliveCountMax, тогда ssh отключится от сервера. Это значение по умолчанию равно 3 (так 3 * 30 = 90 секунд без активности сервера), увеличивайте его, если оно соответствует вашим потребностям. В файле .ssh / config имеется больше опций конфигурации. Вы можете прочитать:
Использование файла конфигурации SSH
Для получения дополнительной информации о других параметрах. Возможно, вы не захотите применить это к каждому подключаемому серверу, к которому относится этот пример. Или ограничьте его только конкретным сервером, заменив строку Host * на Host <IP> (замените на IP-адрес, см. Справочную страницу ssh_config).
Конфигурация клиента
Точно так же вы можете сказать серверу быть нежным с вашими клиентами. Конфигурационный файл - /etc/ssh/sshd_config.
ClientAliveInterval 20
ClientAliveCountMax 5
Вы можете отключить его, установив ClientAliveInterval на 0 или настроить ClientAliveInterval и ClientAliveCountMax, чтобы установить максимальную бездействие клиента ssh без ответа к зондам. Одно из преимуществ этих настроек над TCPKeepAlive заключается в том, что сигналы отправляются через зашифрованные каналы, поэтому он вряд ли будет подделать.
Сессии SSH могут прерываться из-за многочисленных и, возможно, неизбежных причин.
Полезная утилита, которая может использоваться для устранения проблем, вызванных этим, называется screen. Экран - мощная утилита, которая позволяет вам управлять несколькими терминалами, которые останутся в живых независимо от сеанса ssh. Например, если вы запустите screen в сеансе ssh, вы увидите, что новый терминал открыт, и вы можете использовать его для запуска заданий. Допустим, ваша сессия ssh замирает в процессе. Запустив screen -d, затем screen -r снова откроет последний сеанс, и вы сможете продолжить оттуда. Перед использованием убедитесь, что вы прочитали часть документации.
Вы можете добавлять эти аргументы каждый раз при вызове ssh: -o ServerAliveInterval=15 -o ServerAliveCountMax=3
Вам не нужно редактировать файлы конфигурации / etc / ssh / *, если вы это сделаете.
Вы можете создать псевдоним bash или функцию или скрипт, чтобы сделать это легко.
Например эти функции bash, которые вы можете добавить в свой .bashrc, do_ssh используется вручную, чтобы включить keepalives. do_ssh_pty используется в сценариях для установки pty и предотвращения запросов.
do_ssh() {
ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
do_ssh_pty() {
ssh -tt -o "BatchMode=yes" -o "StrictHostKeyChecking=no" -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
Теперь можно использовать do_ssh user@host или do_ssh user@host <args> <command>, а keepalives будут активны.
Я абсолютно люблю Моша. Я часто вхожу в сервер, закрываю свой ноутбук и иду в кафе, открываю его и продолжаю, как будто ничего не изменилось.
Мош (мобильная оболочка) Приложение удаленного терминала, которое позволяет роуминг, поддерживает прерывистую связь, и обеспечивает интеллектуальное локальное эхо и редактирование строк пользовательских нажатий клавиш. Мош является заменой SSH. Он более надежный и отзывчивый, особенно по Wi-Fi, сотовой и междугородной связью. Мош - бесплатное программное обеспечение, доступное для GNU / Linux, FreeBSD, Solaris, Mac OS X и Android.У меня есть сценарий на удаленном сервере, который никогда не сработает, независимо от клиента или сервера конфигурации SSH.
#!/bin/bash
while true; do date; sleep 10; done;
Сохраните его в файле dummy.sh и быстро запустите его перед вами свернуть окно или отойти от него. Он будет печатать текущую метку времени на сервере и поддерживать ваше соединение до тех пор, пока соединение не будет удалено по какой-либо другой причине. Когда вы вернетесь к этому терминалу, просто нажмите CTRL + C и продолжайте работать.
Для меня я получал Write failed: Broken pipe, даже когда я активно вводил vim или приглашение оболочки. Я не мог просматривать интернет-локально ни на какое-то время. (Я подключался удаленно к Ubuntu, используя Terminal.)
Другие в моем сетевом потоке много видео из Netflix и других мест. Я не могу это доказать, но я подозреваю, что это проблема интернет-провайдера или маршрутизатора. Например, Verizon и Netflix указывают друг на друга по проблемам сети своих клиентов.
Если у вас есть модемное соединение и потоковое видео или музыка с одновременным соединением SSH или telnet, это неизбежно в какой-то момент вы получите сообщение об сломанном трубопроводе. Модернизация моего широкополосного пакета ISP показала, что мое поврежденное соединение стало менее частым.
Я удаленно обновляю сервер Ubuntu с ясного до точного и потерял ssh-соединение в середине обновления с сообщением «Write failed. Brocken pipe». ClientAliveInterval и ServerAliveInterval ничего не сделали. Решение состоит в том, чтобы включить параметры TCPKeepAlive в клиенте ssh:
TCPKeepAlive yes
в
/etc/ssh/ssh_config
Для клиента отредактируйте файл ~/.ssh/config (или /etc/ssh/ssh_config) следующим образом:
Host *
TCPKeepAlive yes
ServerAliveInterval 120
TCPKeepAlive - указывает, должна ли система отправлять сообщения keepalive TCP на другую сторону. Если они будут отправлены, смерть соединения или сбой одной из машин будет правильно замечена. Однако это означает, что соединения будут умирать, если маршрут временно остановлен, а некоторые люди находят его раздражающим (по умолчанию «да»). ServerAliveInterval - устанавливает интервал времени ожидания в секундах, после которого, если данные не были получены с сервера, ssh (1) отправит сообщение через зашифрованный канал, чтобы запросить ответ от сервера. Значение по умолчанию равно 0, что указывает на то, что эти сообщения не будут отправляться на сервер. Для сервера отредактируйте свой /etc/ssh/sshd_config как:
ClientAliveInterval 600
ClientAliveCountMax 0
Если вы хотите, чтобы ssh-клиент автоматически покидал (тайм-аут) через 10 минут ( 600 секунд).
TCPKeepAlive - указывает, должна ли система отправлять сообщения keepalive TCP на другую сторону. Если они будут отправлены, смерть соединения или сбой одной из машин будет правильно замечена. Однако это означает, что соединения будут умирать, если маршрут временно отключен, а некоторые люди находят его раздражающим (по умолчанию «да»).
TCPKeepAlive - указывает время ожидания в секундах. Через x секунд, ssh-сервер отправит клиенту сообщение с запросом ответа. Deafult - 0 (сервер не будет отправлять сообщение клиенту для проверки).ClientAliveCountMax - указывает общее количество сообщений проверки, отправленных сервером ssh, без получения ответа от клиента ssh. Значение по умолчанию: 3.
Конфигурация клиента
Попробуйте создать файл:
~/.ssh/config
Добавить содержимое:
Host *
ServerAliveInterval 30
ServerAliveCountMax 5
Теперь ssh на ваш сервер и посмотрите, проблема исправлена. Параметр ClientAliveInterval полезен только при настройке ssh-сервера (aka sshd), он не изменяет ничего на стороне клиента ssh, поэтому не используйте его в вышеуказанном файле конфигурации.
Это отправит сигнал hello-are-you-there на сервер, если не было получено пакетов за предыдущие 30 секунд (как указано выше). Однако, если количество последовательных сигналов приветствия к вам достигнет ServerAliveCountMax, тогда ssh отключится от сервера. Это значение по умолчанию равно 3 (так 3 * 30 = 90 секунд без активности сервера), увеличивайте его, если оно соответствует вашим потребностям. В файле .ssh / config имеется больше опций конфигурации. Вы можете прочитать:
Использование файла конфигурации SSH
Для получения дополнительной информации о других параметрах. Возможно, вы не захотите применить это к каждому подключаемому серверу, к которому относится этот пример. Или ограничьте его только конкретным сервером, заменив строку Host * на Host <IP> (замените на IP-адрес, см. Справочную страницу ssh_config).
Конфигурация клиента
Точно так же вы можете сказать серверу быть нежным с вашими клиентами. Конфигурационный файл - /etc/ssh/sshd_config.
ClientAliveInterval 20
ClientAliveCountMax 5
Вы можете отключить его, установив ClientAliveInterval на 0 или настроить ClientAliveInterval и ClientAliveCountMax, чтобы установить максимальную бездействие клиента ssh без ответа к зондам. Одно из преимуществ этих настроек над TCPKeepAlive заключается в том, что сигналы отправляются через зашифрованные каналы, поэтому он вряд ли будет подделать.
Сессии SSH могут прерываться из-за многочисленных и, возможно, неизбежных причин.
Полезная утилита, которая может использоваться для устранения проблем, вызванных этим, называется screen. Экран - мощная утилита, которая позволяет вам управлять несколькими терминалами, которые останутся в живых независимо от сеанса ssh. Например, если вы запустите screen в сеансе ssh, вы увидите, что новый терминал открыт, и вы можете использовать его для запуска заданий. Допустим, ваша сессия ssh замирает в процессе. Запустив screen -d, затем screen -r снова откроет последний сеанс, и вы сможете продолжить оттуда. Перед использованием убедитесь, что вы прочитали часть документации.
Вы можете добавлять эти аргументы каждый раз при вызове ssh: -o ServerAliveInterval=15 -o ServerAliveCountMax=3
Вам не нужно редактировать файлы конфигурации / etc / ssh / *, если вы это сделаете.
Вы можете создать псевдоним bash или функцию или скрипт, чтобы сделать это легко.
Например эти функции bash, которые вы можете добавить в свой .bashrc, do_ssh используется вручную, чтобы включить keepalives. do_ssh_pty используется в сценариях для установки pty и предотвращения запросов.
do_ssh() {
ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
do_ssh_pty() {
ssh -tt -o "BatchMode=yes" -o "StrictHostKeyChecking=no" -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
Теперь можно использовать do_ssh user@host или do_ssh user@host <args> <command>, а keepalives будут активны.
Я абсолютно люблю Моша. Я часто вхожу в сервер, закрываю свой ноутбук и иду в кафе, открываю его и продолжаю, как будто ничего не изменилось.
Мош (мобильная оболочка) Приложение удаленного терминала, которое позволяет роуминг, поддерживает прерывистую связь, и обеспечивает интеллектуальное локальное эхо и редактирование строк пользовательских нажатий клавиш. Мош является заменой SSH. Он более надежный и отзывчивый, особенно по Wi-Fi, сотовой и междугородной связью. Мош - бесплатное программное обеспечение, доступное для GNU / Linux, FreeBSD, Solaris, Mac OS X и Android.У меня есть сценарий на удаленном сервере, который никогда не сработает, независимо от клиента или сервера конфигурации SSH.
#!/bin/bash
while true; do date; sleep 10; done;
Сохраните его в файле dummy.sh и быстро запустите его перед вами свернуть окно или отойти от него. Он будет печатать текущую метку времени на сервере и поддерживать ваше соединение до тех пор, пока соединение не будет удалено по какой-либо другой причине. Когда вы вернетесь к этому терминалу, просто нажмите CTRL + C и продолжайте работать.
Для меня я получал Write failed: Broken pipe, даже когда я активно вводил vim или приглашение оболочки. Я не мог просматривать интернет-локально ни на какое-то время. (Я подключался удаленно к Ubuntu, используя Terminal.)
Другие в моем сетевом потоке много видео из Netflix и других мест. Я не могу это доказать, но я подозреваю, что это проблема интернет-провайдера или маршрутизатора. Например, Verizon и Netflix указывают друг на друга по проблемам сети своих клиентов.
Если у вас есть модемное соединение и потоковое видео или музыка с одновременным соединением SSH или telnet, это неизбежно в какой-то момент вы получите сообщение об сломанном трубопроводе. Модернизация моего широкополосного пакета ISP показала, что мое поврежденное соединение стало менее частым.