Что я могу сделать, чтобы настроить SSH на клиенте и на серверах для предотвращения Write Failed: broken pipe
ошибок? Это часто происходит, если вы спите на своем клиентском компьютере и возобновите работу позже.
screen
?
Что я могу сделать, чтобы настроить SSH на клиенте и на серверах для предотвращения Write Failed: broken pipe
ошибок? Это часто происходит, если вы спите на своем клиентском компьютере и возобновите работу позже.
screen
?
Ответы:
Я пробовал это /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
.
Bad configuration option: ClientAliveInterval
Bad configuration option
ошибку на OSX 10.8.4.
Сеансы SSH могут прерваться из-за многочисленных и, возможно, неизбежных причин.
Полезная утилита, которая может использоваться для смягчения проблем, вызванных этим, называется screen
. Screen - мощная утилита, которая позволяет вам управлять несколькими терминалами, которые будут работать независимо от сеанса ssh. Например, если вы запустите screen
сеанс ssh, вы увидите, что новый терминал открыт, и вы можете использовать его для запуска заданий. Допустим, ваша сессия SSH умирает в процессе. Запуск screen -d
затем screen -r
будет вновь открыть последнюю сессию , и вы будете в состоянии продолжить оттуда. Убедитесь, что вы прочитали часть документации, прежде чем использовать ее.
screen -d -r
чтобы восстановить ваш последний сеанс.
screen -dr
. Или в screen -x
зависимости от того, что вы планируете делать. Дело в том, что нужно знать, что делают все эти переключатели, чтобы можно было использовать соответствующие, а не просто слепо следовать советам интернет-людей. Хорошее компактное резюме доступно здесь: ss64.com/bash/screen.html
Конфигурация клиента
Попробуйте создать файл:
~/.ssh/config
Добавьте содержимое:
Host *
ServerAliveInterval 30
ServerAliveCountMax 5
Теперь зайдите на ваш сервер и посмотрите, исправлена ли ваша проблема. Параметр ClientAliveInterval полезен только при настройке сервера ssh (он же sshd), он ничего не меняет на стороне клиента ssh, поэтому не используйте его в приведенном выше файле конфигурации.
Это отправит на сервер сигнал приветствия, если вы не получили пакетов в течение предыдущих 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 заключается в том, что сигналы отправляются по зашифрованным каналам, поэтому вероятность их подделки меньше.
Я удаленно обновляю сервер Ubuntu с lucid до точного и теряю соединение ssh в середине обновления с сообщением «Ошибка записи. Сломанный канал». ClientAliveInterval и ServerAliveInterval ничего не сделали. Решение состоит в том, чтобы включить опции TCPKeepAlive в клиенте ssh:
TCPKeepAlive yes
в
/etc/ssh/ssh_config
Для клиента отредактируйте ваш ~/.ssh/config
(или /etc/ssh/ssh_config
) файл следующим образом:
Host *
TCPKeepAlive yes
ServerAliveInterval 120
TCPKeepAlive - указывает, должна ли система отправлять сообщения поддержки активности TCP другой стороне. Если они отправлены, смерть соединения или сбой одной из машин будут замечены должным образом. Однако это означает, что соединения прекратят свое существование, если маршрут временно не работает, и некоторые люди считают это раздражающим (по умолчанию «да»).
ServerAliveInterval - устанавливает интервал ожидания в секундах, после которого, если с сервера не было получено никаких данных, ssh (1) отправит сообщение по зашифрованному каналу для запроса ответа от сервера. По умолчанию 0, что означает, что эти сообщения не будут отправлены на сервер.
Для сервера отредактируйте ваш /etc/ssh/sshd_config
как:
ClientAliveInterval 600
ClientAliveCountMax 0
Если вы хотите, чтобы клиент ssh автоматически выходил (тайм-аут) через 10 минут (600 секунд).
ClientAliveCountMax - указывает общее количество контрольных сообщений, отправленных сервером ssh без получения ответа от клиента ssh. По умолчанию 3.
ClientAliveInterval - указывает время ожидания в секундах. Через x секунд ssh-сервер отправит клиенту сообщение с просьбой ответить. Значение по умолчанию равно 0 (сервер не отправляет сообщение клиенту для проверки.).
Смотрите также: Что конкретно делают опции ServerAliveInterval
и ClientAliveInterval
в sshd_config?
Я очень люблю Моша. Я часто захожу на сервер, закрываю свой ноутбук и иду в кафе, открываю его и продолжаю, как будто ничего не изменилось.
Mosh (мобильная оболочка)
Приложение для удаленного терминала, которое позволяет осуществлять роуминг , поддерживает прерывистое соединение и обеспечивает интеллектуальное локальное эхо и редактирование строк пользовательских нажатий клавиш.
Mosh - это замена SSH. Он более надежный и отзывчивый, особенно по Wi-Fi, сотовой связи и междугородной связи.
Mosh - бесплатное программное обеспечение, доступное для GNU / Linux, FreeBSD, Solaris, Mac OS X и Android.
Для меня, я получал, Write failed: Broken pipe
даже когда я активно набирал vim или в приглашении оболочки. Я тоже не мог просматривать интернет локально некоторое время. (Я подключался удаленно к Ubuntu через терминал.)
Другие в моей сети транслируют много видео из Netflix и других мест. Я не могу доказать это, но я подозреваю, что это проблема с интернет-провайдером или маршрутизатором. Например, Verizon и Netflix указывают пальцем друг на друга из-за проблем своих клиентов в сети.
Если у вас есть подключение удаленного доступа и потоковое видео или музыка с одновременным подключением через SSH или telnet, в какой-то момент вы неизбежно получите сообщение о разрыве канала. Модернизация широкополосного пакета моего интернет-провайдера, казалось, делала мое разорванное соединение менее частым.
Я разместил свой ответ здесь, так как это была не Ubuntu VM.
ssh -o IPQoS=throughput user@host
У меня есть скрипт на удаленном сервере, который, кажется, никогда не выходит из строя, независимо от конфигурации клиента или сервера SSH.
#!/bin/bash
while true; do date; sleep 10; done;
Сохраните его в некотором файле dummy.sh и быстро запустите, прежде чем свернуть окно или отойти от него. Он будет продолжать печатать текущую метку времени на сервере и поддерживать ваше соединение в активном состоянии до тех пор, пока соединение не будет прервано по какой-либо другой причине. Когда вы вернетесь к этому терминалу, просто нажмите CTRL + C и продолжайте работать.
top
работать
Вы можете добавлять эти аргументы каждый раз, когда вызываете ssh: -o ServerAliveInterval=15 -o ServerAliveCountMax=3
Вам не нужно редактировать файлы конфигурации / etc / ssh / *, если вы это делаете.
Вы можете создать псевдоним bash или функцию или скрипт, чтобы сделать это легко.
Например, эти функции bash вы можете добавить в свой .bashrc, do_ssh используется вручную для включения keepalive. 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>
и keepalive будет активен.