Что можно сделать, чтобы настроить 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
.
Я очень люблю Моша. Я часто подключаюсь по ssh к серверу, закрываю ноутбук и иду в кафе, открываю его и продолжаю, как будто ничего не изменилось.
Mosh (мобильная оболочка)
Приложение удаленного терминала, которое позволяет роуминг , поддерживает прерывистый возможность подключения и обеспечивает интеллектуальную локальную echo и строковое редактирование нажатий клавиш пользователем
Mosh - это замена SSH. Он более надежный и отзывчивый, особенно через Wi-Fi, сотовую связь и междугородние связи.
Mosh - бесплатное программное обеспечение, доступное для GNU / Linux, FreeBSD, Solaris, Mac OS X и Android.
Client configuration
Попробуйте создать файл:
~/.ssh/config
Добавьте содержимое:
Host *
ServerAliveInterval 30
ServerAliveCountMax 5
Теперь ssh к вашему серверу и посмотрите, исправлена ли ваша проблема. Опция ClientAliveInterval полезна только при настройке ssh сервера (он же sshd), она ничего не меняет на стороне клиента ssh, поэтому не используйте ее в вышеуказанном конфигурационном файле.
Это отправит серверу сигнал "hello-are-you-there", если за предыдущие 30 секунд не было получено ни одного пакета (как указано выше). Однако, если количество последовательных сигналов hello-are-you-there достигнет ServerAliveCountMax, то ssh отключится от сервера. По умолчанию это значение равно 3 (т.е. 3*30 = 90 секунд без активности сервера), увеличьте его, если это соответствует вашим потребностям. В .ssh/config файле есть еще много опций конфигурации, и вы можете прочитать:
For more information on other options. Возможно, вы не захотите применять эту опцию к каждому серверу, к которому вы подключитесь в этом примере. Или ограничьте его только для конкретного сервера, заменив строку Host *
на Host
(замените на IP-адрес, смотрите страницу руководства ssh_config).
Server configuration
Аналогичным образом вы можете сказать серверу, чтобы он был аккуратен с вашими клиентами. Файл конфигурации имеет вид /etc/ssh/sshd_config
.
ClientAliveInterval 20
ClientAliveCountMax 5
Вы можете либо отключить его, установив ClientAliveInterval
в 0
, либо настроить ClientAliveInterval
и ClientAliveCountMax
, чтобы установить максимальную неактивность клиента ssh, не реагируя на датчики. Одним из преимуществ этих настроек перед TCPKeepAlive является то, что сигналы посылаются по зашифрованным каналам, поэтому меньше вероятность подмены.
Сеансы SSH могут прерваться по многочисленным и, возможно, неизбежным причинам.
Полезная утилита, которая может быть использована для уменьшения проблем, вызванных этим, называется screen
. Screen - это мощная утилита, которая позволяет управлять несколькими терминалами, которые останутся в живых независимо от сеанса ssh. Например, если Вы запустите screen
в сеансе ssh, Вы увидите, что открыт новый терминал, и сможете использовать его для выполнения заданий. Скажем, что Ваша сессия ssh умирает в процессе выполнения задания. Запустив экран -d
, затем экран -d
.r
снова откроет последнюю сессию, и Вы сможете продолжить ее. Перед использованием обязательно прочитайте часть документации .
Для клиента отредактируйте файл ~ / .ssh / config
(или / etc / ssh / ssh_config
) следующим образом:
Host *
TCPKeepAlive yes
ServerAliveInterval 120
TCPKeepAlive - указывает, система должна отправить TCP keepalive сообщения на другую сторону. Если они будут отправлены, смерть связи или авария одной из машин будет правильно замечена. Тем не мение, это означает, что соединение прекратится, если маршрут временно отключится, и некоторых людей это раздражает (по умолчанию «да»).
ServerAliveInterval - устанавливает интервал тайм-аута в секундах, после которого если с сервера не было получено никаких данных, ssh (1) отправит сообщение через зашифрованный канал для запроса ответа от сервер. По умолчанию 0, что означает, что эти сообщения не будут отправлено на сервер.
Для сервера отредактируйте ваш / etc / ssh / sshd_config
как:
ClientAliveInterval 600
ClientAliveCountMax 0
Если вы хотите, чтобы клиент ssh завершал работу (тайм-аут) автоматически через 10 минут (600 секунд).
ClientAliveCountMax - указывает общее количество проверок. сообщение, отправленное ssh-сервером, без получения ответа от клиент ssh. По умолчанию 3.
ClientAliveInterval - указывает время ожидания в секундах. После х количество секунд, ssh-сервер отправит клиенту сообщение с запросом для ответа. Deafult - 0 (сервер не будет отправлять сообщение клиенту на проверьте.).
См. также: Что именно делают параметры ServerAliveInterval
и ClientAliveInterval
в sshd_config?
Я удаленно обновляю сервер Ubuntu с чистого листа до точного и потерял ssh-соединение в середине обновления с сообщением "Write failed". Сломанная труба". ClientAliveInterval и ServerAliveInterval ничего не сделали. Решение заключается в том, чтобы включить опции TCPKeepAlive в клиентском ssh:
TCPKeepAlive yes
in
/etc/ssh/ssh_config
Надеюсь, это поможет
Я опубликовал мой ответ здесь, так как это не была виртуальная машина Ubuntu.
ssh -o IPQoS=throughput user@host
Для меня я получал Ошибка записи: сломана труба
, даже когда я активно набирал в vim или в командной строке. Я тоже какое-то время не мог выходить в Интернет локально. (Я удаленно подключался к Ubuntu с помощью терминала.)
Другие пользователи в моей сети передают много видео из Netflix и других мест. Я не могу это доказать, но подозреваю, что это проблема с интернет-провайдером или маршрутизатором. Например, Verizon и Netflix указывают друг на друга из-за сетевых проблем своих клиентов.
Если у вас есть коммутируемое соединение и вы транслируете потоковое видео или музыку с одновременным SSH или telnet-соединением, это неизбежно в какой-то момент вы получите сообщение о сломанной трубе. Обновление пакета широкополосного доступа к Интернету помогло мне реже обрывать соединение.
Вы можете добавлять эти аргументы при каждом вызове ssh: -o ServerAliveInterval = 15 -o ServerAliveCountMax = 3
Вам не нужно редактировать / etc / ssh / * config, если вы это сделаете.
Вы можете создать псевдоним, функцию или сценарий bash, чтобы упростить эту задачу.
Например, эти функции bash вы можете добавить в свой .bashrc, do_ssh используется вручную для включения сообщений поддержки активности. 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
, и сообщения проверки активности будут активен.
Man attālajā serverī ir skripts, kas, šķiet, nekad neizdodas, neatkarīgi no SSH konfigurācijas klienta vai servera.
#!/bin/bash
while true; do date; sleep 10; done;
Saglabājiet to kādā dummy.sh failā un ātri palaidiet to pirms loga samazināšanas vai attālināšanas no tā. Tas turpinās drukāt pašreizējo laika zīmogu uz servera un uzturēs jūsu savienojumu dzīvu, kamēr savienojums netiek pārtraukts kāda cita iemesla dēļ. Atgriežoties pie šī termināļa, vienkārši nospiediet CTRL + C un turpiniet strādāt.