Оказывается, что ключ, который не работал, не был настроен правильно в authorized_keys
файл, в конце концов. Извините за это...
Я неправильно принял это ssh -i /home/user1/.ssh/id_rsa user1@myserver
был признак, что это было настроено правильно, но это, оказывается, не имеет место. Это использует другие ключи также. Принуждение ssh -i /home/user1/.ssh/id_rsa -oIdentitiesOnly=yes user1@myserver
заставляет его перестать работать с неправильной конфигурацией также.
Я предполагаю агент SSH, настроенный, когда вхождение в систему с Gnome также берет другие ключи ~/.ssh/
каталог, который заставляет его работать с тем другим ключом, даже если неправильный ключ указан с -i
.
Изменения, которые вы внесли в /etc/ssh/ssh_config
и /etc/ssh/sshd_config
, верны, но все равно не будут иметь никакого эффекта.
Чтобы заставить вашу конфигурацию работать, сделайте эти изменения на клиенте:
/etc/ssh/ssh_config
Host *
ServerAliveInterval 100
ServerAliveInterval Клиент будет посылать нулевой пакет на сервер каждые 100 секунд, чтобы соединение оставалось живым
NULL пакет, посылаемый сервером клиенту. Тот же самый пакет посылается клиентом серверу. TCP NULL пакет не содержит никаких управляющих флагов, таких как SYN, ACK, FIN и т.д., потому что сервер не требует ответа от клиента. NULL пакет описан здесь: https://tools.ietf.org/html/rfc6592
Затем на сервере настраивается часть sshd.
/etc/ssh/sshd_config
ClientAliveInterval 60
TCPKeepAlive yes
ClientAliveCountMax 10000
ClientAliveInterval Сервер подождет 60 секунд, прежде чем отправить нулевой пакет клиенту, чтобы соединение оставалось живым
TCPKeepAlive Есть ли возможность убедиться, что некоторые брандмауэры не разрывают простаивающие соединения.
ClientAliveCountMax Server будет посылать живые сообщения клиенту, даже если он не получил ни одного сообщения от клиента.
Наконец-то перезапустите ssh сервер ssh
service sshd restart
или service sshd restart
, в зависимости от того, на какой системе вы находитесь.
Проверьте конфигурацию sshd на главной машине /etc/sshd_config
для настройки IdleTimeout
.
IdleTimeout time
Sets idle timeout limit to time in seconds (s or nothing afternumber),
in minutes (m), in hours (h), in days (d), or in weeks (w).If the
connection have been idle (all channels) for that long time thechild
process is killed with SIGHUP, and connection is closed down.
Вам не нужно связываться с скриптами init. В Debian вы можете просто добавить строку в /etc/init.d/rc.local
, которые вызывают программу; Затем он будет запущен после всех скриптов init.
Если вы позвоните в программу в /etc/init.d/boot.local
вместо этого он будет работать только при загрузке, а не при переключении руге.
С openssh:
Вам необходимо включить
TCPKeepAlive yes
как в вашем клиенте ssh_config (например, / etc / ssh / ssh_config
или в ~ /. ssh / config
) и ваш сервер назначения SSH-сервера работает OpenSSH (например, / etc / ssh / sshd_config).
Так что каждый раз, когда ваше соединение простаивает, OpenSSH отправляет какой-то фигурный пакет на ваш пункт назначения ...
Личное предложение: используйте экран
на удаленном хосте; ему удастся поддерживать ваше соединение до тех пор, пока оно остается активным в терминале.
Вот что я обычно добавляю в / etc / screenrc
для быстрой идентификации моих сеансов экрана:
hardstatus alwayslastline
hardstatus string "%{= kG}[ %{G}%H %{g}][ %{=kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B}%Y-%m-%d %{W}%c %{g}]"
defscrollback 8192
РЕДАКТИРОВАТЬ: Подсказки.
В строке hardstatus
будет отображаться нижняя строка состояния, например, эта:
Буфер прокрутки также расширен до 8192 строк вместо обычных 1000-1500 (в зависимости от распространение).
Если проблема заключается в гибернации портативного компьютера или некачественном сетевом подключении, я бы рекомендовал использовать mosh.
, который работает поверх ssh
и позволяет автоматически переподключаться.
Mosh (мобильная оболочка)
Приложение удаленного терминала, которое позволяет осуществлять роуминг, поддерживает прерывистое соединение и обеспечивает интеллектуальное локальное эхо и линейное редактирование нажатий клавиш пользователем.
Mosh заменяет SSH. Он более надежен и отзывчив, особенно при использовании Wi-Fi, сотовой связи и междугородних соединений.
Mosh - бесплатное программное обеспечение, доступное для GNU / Linux, BSD, macOS, Solaris, Android, Chrome и iOS.
В сочетании с tmux
(или более старым экраном
) это позволяет мне подключаться через ssh
к серверу с моего ноутбука и оставаться на связи в течение нескольких дней. даже при смене Wi-Fi-соединения и при пропадании мобильных данных.
В моем случае проблема заключалась в большом размере MTU. Вы можете изменить MTU на роутере, если используете NAT, но я меняю MTU на сервере:
sudo /sbin/ifconfig eth0 mtu 1036
sudo /etc/init.d/networking restart
Небольшой лайфхак, который я использую, если невозможно использовать экран или редактировать настройки сервера hosts ssh, или любые другие хорошие и правильные предложения выше...
Просто запустите top всякий раз, когда собираетесь оставить сеанс в покое.
Как правило, это будет поддерживать его жизнь на неопределенный срок, хотя, как отмечали другие, это может быть не всегда разумно с точки зрения -и -безопасности!
Раньше у меня зависало SSH-соединение.
Приведенное ниже решение сработало для меня. Теперь соединение SSH всегда остается активным.
С сервера:
/etc/ssh/sshd_config
$ sudo vi /etc/ssh/sshd_config
ClientAliveInterval 60
$ sudo service sshd restart
С локальной машины/клиента:
/etc/ssh/ssh_config
$ sudo vi /etc/ssh/ssh_config
ServerAliveInterval 60
Об этих параметрах:
ServerAliveInterval
:количество секунд, в течение которых клиент будет ждать перед отправкой нулевого пакета на сервер (, чтобы поддерживать соединение ).
ClientAliveInterval
:количество секунд, в течение которых сервер будет ждать перед отправкой нулевого пакета клиенту (, чтобы поддерживать соединение ).
Important: Whenever any modification is performed on a Production instance, please ensure to create a backup.
Мой SSH начал постоянно закрываться через минуту после того, как был открыт, и я думаю, что это было из-за настройки сетевого адаптера, которую я изменил, чтобы мой компьютер не просыпался от спящего режима. Мой компьютер просыпался без причины, поэтому я нашел эту статью о том, как это остановить, и это сработало. В статье говорится, что нужно зайти в Диспетчер устройств, найти соответствующий адаптер Ethernet или Wi-Fi -в разделе «Сетевые адаптеры», щелкнуть правой кнопкой мыши -по нему, выбрать «Свойства», открыть вкладку «Управление питанием» и снять флажок «Разрешить этому устройству использовать». Разбудить компьютер.
В качестве альтернативы было сказано, что вы можете оставить этот флажок установленным и установить флажок Разрешить только волшебный пакет для пробуждения компьютера. Я сделал это, и позже мой SSH постоянно закрывался через минуту, поэтому я считаю, что это было виновником. Поэтому убедитесь, что этот параметр на вашем сетевом адаптере не изменился по умолчанию. Чтобы изменения вступили в силу, возможно, потребуется перезагрузить компьютер.
У меня была похожая проблема:
Оказывается, прошивка моего роутера устарела!