Запускайте SSH автоматически при загрузке

Совершенно новый для linux и Ubnuntu. Настройка машины для глубокого обучения / нейронных сетей. Пока все идет хорошо. Все установлено и запущено. Я хочу иметь возможность использовать ssh с моего ноутбука Mac для использования системы. Я установил openssh и это сработало.

Однако, когда я перезагружаю компьютер, ssh-сервер не перезагружается. Я проверяю с sudo service ssh status и он сообщает об ошибках и ошибках. Затем я могу запустить его, и все работает нормально.

Моей первой мыслью было, что мне нужно сказать ему, чтобы он запускался при перезагрузке, и я обнаружил этот поток в котором говорится, что он должен запускаться по умолчанию, и мне не нужно добавлять chrontab или что-то в этом роде. Так что я не думаю, что это все.

Потом я нашел этот поток которые предлагают использовать команду sudo update-rc.d ssh defaults, но эта тема довольно старая, и кажется, что ответ, возможно, был неправильным даже тогда?

И тогда я нашел этот поток которые предлагают прокомментировать ListenAddress линия в sshd_config файл. В основном в нем говорится, что если используется ListenAddress, он может попытаться получить IP-адрес до того, как он будет назначен DCHP, и поэтому запуск завершится неудачей. Что имеет смысл. Но мне нужен этот параметр, чтобы заставить мою переадресацию портов работать в моей домашней сети.

Эта документация под записью для Адрес для прослушивания говорит, что

The default is to listen on all local addresses.

Так, может быть, мне это не нужно, чтобы заставить работать переадресацию портов?

Я последовал за предыдущей веткой, чтобы это сообщение об ошибке который также довольно старый, но предлагает использовать network manager для перезапуска ssh каждый раз, когда netmanager получает новый IP.

echo /etc/init.d/ssh restart > /etc/NetworkManager/dispatcher.d/10sshchmod 755 /etc/NetworkManager/dispatcher.d/10ssh

Это намного больше, чем этот новичок может оценить на данный момент. Это безопасно? Это тот способ сделать это? Было ли что-то еще разработано за последние 7 лет?

Любой совет был бы полезен. Спасибо.

Вы пробовали просто установить

sudo systemctl enable ssh

?

Вот как я настроил свой ssh на запуск при запуске.

**** Я оставляю в приведенной выше части ответа на случай, если это будет полезно для других, кто столкнется с этим сообщением****

Цитирую мой комментарий выше:

Как у вас настроена переадресация портов? Я вообще не использую ListenAddress, и на моем домашнем сервере все работает нормально. Мой маршрутизатор пересылает все, что поступает на указанный мной порт (22, если вам нужен стандартный порт, но вы можете использовать что угодно, если это не конфликтует с другими службами на вашем intl. сеть) к нужному мне компьютеру. Например, все, что поступает на порт 12345, пересылается на порт 22 на моем сервере CentOS. Все, что поступает на 12346, пересылается на порт 22 моего безголового RasPi. Все, что поступает на 12347, отправляется на порт 6697 для вышибалы IRC на моем RasPi

ListenAddress не имеет ничего общего с переадресацией портов, ListenAdress может использоваться для сервера, который настроен с несколькими IP-адресами по одной или нескольким сетевым сетям. Цитирую отсюда (вся страница - хорошее объяснение): https://www.cyberciti.biz/tips/howto-openssh-sshd-listen-multiple-ip-address.html

>>Допустим, у вас всего 8 общедоступных IP-адресов и один частный IP-адрес. Вы хотели бы привязать sshd только к одному выбранному общедоступному IP-адресу (например, 70.5.xx.xx) и частному IP-адресу (10.1.5.1).

>>>К счастью, есть простой способ добиться этого, используя опцию ListenAddress. В нем указываются локальные адреса, которые должен прослушивать sshd. Если эта директива пропущена из файла конфигурации, sshd будет привязывать или перечислять все доступные IP-адреса.

Это делается для того, чтобы позволить одному из ваших нескольких IP-адресов принимать ssh-соединения. Я предполагаю, что вы установили ListenAddress либо на свой общедоступный IP-адрес, либо на внутренний IP-адрес вашего маршрутизатора - я предполагаю, что если бы вы установили его на локальный IP-адрес вашего сервера, это сработало бы нормально. Как бы то ни было, теперь вы знаете, как работает ListenAddress, и будете готовы, если вам придется настраивать более сложный сервер. Рад слышать, что у тебя все получилось.

Поскольку предложенное решение не сработало для меня, я в конце концов обнаружил, что для запуска SSH при загрузке требуется дополнительная команда:

sudo update-rc.d ssh defaultssudo systemctl enable ssh.socket

Некоторые упоминали, что эта команда:

sudo systemctl enable ssh.service

должна быть выполнена вместо этой команды:

sudo systemctl enable ssh

Я понимаю, что это более старый пост, но я обнаружил, что он пытается решить аналогичную проблему с ssh, не пережившим перезагрузку. Возможно, это поможет и кому-то еще, если они наткнутся на эту тему.Я обнаружил, что ssh.socket был настроен на запуск до ssh.service и имел конфликты с ssh.service. Я изменил ssh.socket на запуск после ssh.service, который, похоже, исправил это для меня.

был

vim /lib/systemd/system/ssh.socket[Unit]Description=OpenBSD Secure Shell server socketBefore=ssh.serviceConflicts=ssh.service

Сейчас

vim /lib/systemd/system/ssh.socket[Unit]Description=OpenBSD Secure Shell server socketAfter=ssh.serviceConflicts=ssh.service

Используете ли вы переадресацию портов, и вам не нужно было использовать параметр ListenAddress? Если да, можете ли вы поделиться тем, что включает в себя “правильно настроенный”?

Как у вас настроена переадресация портов? Я вообще не использую ListenAddress, и на моем домашнем сервере все работает нормально. Мой маршрутизатор пересылает все, что поступает на указанный мной порт (22, если вам нужен стандартный порт, но вы можете использовать что угодно, если это не конфликтует с другими службами на вашем intl. сеть) к нужному мне компьютеру. Например, все, что поступает на порт 12345, пересылается на порт 22 на моем сервере CentOS. Все, что поступает на 12346, пересылается на порт 22 моего безголового RasPi. Все, что поступает на 12347, отправляется на порт 6697 для вышибалы IRC на моем RasPi.

Ну и дела, я просто установил пакет openssh-server и правильно его настроил. С тех пор мой ssh-сервер автоматически запускался должным образом каждый раз. Вообще нет необходимости в каких-либо дополнительных манипуляциях.

Несмотря на все это, вы не предоставили никакой информации о состоянии SSH при первой загрузке. Что выводит “systemctl status ssh”?

Ваша проблема звучит примерно так (по-видимому, нерешенная) SSH-демон не запускается обычным способом - не могли бы вы, пожалуйста, [отредактировать] свой вопрос, чтобы включить вывод systemctl status NetworkManager-wait-online.service

Я закомментировал ListenAddress в своем файле sshd_config, и теперь он работает просто отлично. Хотите включить это в ответ, чтобы я мог пометить его как правильный? Можете ли вы объяснить, почему он вообще там есть, если он не нужен и, похоже, только нарушает работу службы ssh?

Обновил свой ответ ниже. Рад слышать, что теперь у вас все получается.