Що я можу зробити, щоб налаштувати SSH на клієнті та серверах, щоб запобігти Write Failed: broken pipe
помилкам? Це часто виникає, якщо ви спите клієнтський комп'ютер і продовжуєте пізніше.
screen
?
Що я можу зробити, щоб налаштувати SSH на клієнті та серверах, щоб запобігти Write Failed: broken pipe
помилкам? Це часто виникає, якщо ви спите клієнтський комп'ютер і продовжуєте пізніше.
screen
?
Відповіді:
Я спробував це /etc/ssh/ssh_config
для Linux та Mac:
Host *
ServerAliveInterval 120
Ось як часто, за лічені секунди, він повинен надсилати повідомлення про збереження життя на сервер. Якщо це не працює, тоді тренуйте мавпу, щоб натиснути клавішу кожні дві хвилини, поки ви працюєте.
Ви можете встановити або 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
. Екран - це потужна утиліта, яка дозволяє керувати кількома терміналами, які залишаться живими незалежно від сеансу 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
Тепер ssh на ваш сервер і подивіться, чи виправлена ваша проблема. Параметр ClientAliveInterval корисний лише під час налаштування ssh-сервера (він же sshd), він не змінює нічого на стороні клієнта ssh, тому не використовуйте його у наведеному вище файлі конфігурації.
Це надішле сигнал на сервер привіт, якщо ви не отримали жодних пакетів за попередні 30 секунд (як зазначено вище). Однак, якщо кількість послідовних привітних сигналів привітає вас до ServerAliveCountMax, ssh відключиться від сервера. Це значення за замовчуванням до 3 (тому 3 * 30 = 90 секунд без активності сервера), збільште його, якщо воно відповідає вашим потребам. Для файлу .ssh / config є багато інших параметрів конфігурації, і ви можете прочитати:
Використання файла конфігурації SSH
Для отримання додаткової інформації про інші параметри. Ви, можливо, не захочете застосовувати це до кожного сервера, до якого ви підключаєтесь. Або обмежте його лише на певному сервері, замінивши рядок Host *
на Host <IP>
(замініть IP-адресу, див. Сторінку man ssh_config).
Конфігурація сервера
Так само ви можете сказати серверу бути обережними зі своїми клієнтами. Файл конфігурації є /etc/ssh/sshd_config
.
ClientAliveInterval 20
ClientAliveCountMax 5
Ви можете або відключити його, встановивши ClientAliveInterval
на 0
або налаштувати ClientAliveInterval
і ClientAliveCountMax
встановити максимальну SSH клієнта бездіяльність , не відповідав на зондах. Однією з переваг цих налаштувань над TCPKeepAlive є те, що сигнали надсилаються через зашифровані канали, тому це менш ймовірно, що їх можна підробляти.
Я віддалено модернізую сервер Ubuntu з простого до точного та втратив 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 використовується вручну, щоб увімкнути збереження. 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>
і кипариви будуть активними.