Iniciar SSH automáticamente en el arranque

15

Completamente nuevo para Linux y Ubnuntu. Configurar una máquina para hacer aprendizaje profundo / redes neuronales. Hasta ahora va bien. Tengo todo instalado y funcionando. Quiero poder usar ssh desde mi computadora portátil Mac para usar el sistema. Instalé openssh y conseguí que funcionara.

Sin embargo, cuando reinicio la máquina, el servidor ssh no se reinicia. Compruebo con sudo service ssh statuse informa y error. Entonces puedo iniciarlo y todo funciona bien.

Mi primer pensamiento fue que necesitaba decirle que comenzara al reiniciar, y encontré este hilo que dice que debería comenzar por defecto y no necesito agregar un crontab o algo así. Entonces no creo que sea eso.

Luego encontré este hilo que sugiere usar el comando sudo update-rc.d ssh defaults, pero ese hilo es bastante antiguo y parece que la respuesta tal vez no fue la correcta en ese entonces.

Entonces encontré este hilo que sugiere comentar la ListenAddresslínea en el archivo sshd_config . Básicamente dice que si se utiliza ListenAddress, puede intentar obtener la IP antes de que el DCHP la haya asignado y, por lo tanto, el inicio falla. Lo cual tiene sentido. Pero necesito ese parámetro para que mi reenvío de puertos funcione en mi red doméstica.

Esta documentación bajo la entrada de ListenAddress dice que

The default is to listen on all local addresses.

Entonces, ¿tal vez no lo necesito para que el reenvío de puertos funcione?

Seguí el hilo anterior a este informe de error, que también es bastante antiguo, pero sugiere usar el administrador de red para reiniciar ssh cada vez que netmanager obtiene una nueva IP.

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

Eso es mucho más de lo que este novato puede evaluar en este momento. ¿Eso es seguro? ¿Es esa la forma de hacer esto? ¿Se ha resuelto algo más en los últimos 7 años?

Cualquier consejo sería genial. Gracias.

Rothrock
fuente
Gee, simplemente instalé el paquete openssh-server y lo configuré correctamente. Mi servidor ssh se ha iniciado automáticamente correctamente cada vez desde entonces. No hay necesidad de ningún violín extra en absoluto.
user535733
1
¿Está utilizando el reenvío de puertos y no necesitaba usar el parámetro ListenAddress? Si es así, ¿puede compartir lo que incluye "configurado correctamente"?
Rothrock
Por todo esto, no ha proporcionado ninguna información sobre el estado de SSH cuando se inicia por primera vez. ¿Qué da systemctl status sshsalida?
Muru
Su problema suena similar a este (aparentemente no resuelto) SSH Daemon no comienza normalmente de la misma manera - ¿puede editar su pregunta para incluir la salida desystemctl status NetworkManager-wait-online.service
steeldriver
1
¿Cómo tiene su configuración de reenvío de puertos? No uso el ListenAddress en absoluto y las cosas funcionan bien en mi servidor doméstico. Mi enrutador reenvía todo lo que entra en un puerto que especifico (22 si desea el puerto estándar, pero puede usar cualquier cosa siempre que no entre en conflicto con otros servicios en su red internacional) a la computadora que deseo. Por ejemplo, todo lo que viene en el puerto 12345 se reenvía al puerto 22 en mi servidor CentOS. Todo lo que viene en 12346 se reenvía al puerto 22 de mi RasPi sin cabeza. Todo lo que viene en 12347 va al puerto 6697 para el bouncer IRC en mi RasPi.
RobertRSeattle

Respuestas:

43

¿Has probado simplemente configurando

sudo systemctl enable ssh

?

Así es como tengo mi ssh configurado para ejecutarse en el inicio.

**** Me voy en la parte anterior de la respuesta en caso de que sea útil para otros que se encuentren con esta publicación ****

Citando mi comentario de arriba:

¿Cómo tiene su configuración de reenvío de puertos? No uso el ListenAddress en absoluto y las cosas funcionan bien en mi servidor doméstico. Mi enrutador reenvía todo lo que entra en un puerto que especifico (22 si desea el puerto estándar, pero puede usar cualquier cosa siempre que no entre en conflicto con otros servicios en su red internacional) a la computadora que quiero. Por ejemplo, todo lo que viene en el puerto 12345 se reenvía al puerto 22 en mi servidor CentOS. Todo lo que viene en 12346 se reenvía al puerto 22 de mi RasPi sin cabeza. Todo lo que viene en 12347 va al puerto 6697 para el bouncer IRC en mi RasPi

ListenAddress no tiene nada que ver con el reenvío de puertos, ListenAdress se puede usar para un servidor que está configurado con múltiples direcciones IP en una o más NIC. Citando desde aquí (toda la página es una buena explicación): https://www.cyberciti.biz/tips/howto-openssh-sshd-listen-multiple-ip-address.html

Digamos que tiene un total de 8 direcciones IP públicas y una dirección IP privada. Desea> vincular sshd a una IP pública seleccionada (por ejemplo, 70.5.xx.xx) y privada> IP (10.1.5.1) solamente.

Afortunadamente, hay una manera fácil de lograr esto usando la opción ListenAddress. > Especifica las direcciones locales que sshd debería escuchar. Si esta directiva se omite del archivo de configuración, sshd se enlazará o enumerará en todas las direcciones IP disponibles.

Es permitir que una de sus múltiples IP acepte conexiones ssh. Supongo que configuró ListenAddress en su IP pública o en la IP interna de su enrutador. Supongo que si configura eso en la IP local de su servidor, habría funcionado bien. De todos modos, ahora sabe cómo funciona ListenAddress y estará listo si tiene que configurar un servidor más complicado. Me alegra saber que tienes las cosas funcionando.

RobertRSeattle
fuente
2
+1 Esta es la respuesta correcta. Ubuntu 16.04 comenzó a usar systemd. El comando en esta respuesta está usando systemd para iniciar SSH al reiniciar. Los otros subprocesos que el OP enlazó solo se aplicaron al arranque y no systemd o no se aplicaron a su problema en absoluto.
Sam Gleske
1
Hice systemctl list-unit-files –type = service y veo que ssh.service está habilitado. Entonces no creo que ese sea el problema. Pero gracias por el consejo sobre systemctl / systemd. Eso me da más lugares para buscar. ¿Hay alguna manera de decirle a systemd / systemctl que espere hasta que el DCHP devuelva la dirección IP?
Rothrock
Después de habilitar, se debe crear un nuevo archivo, consulte conls -l /etc/systemd/system/sshd.service
Timo
2

Como la solución sugerida no funcionó para mí, eventualmente descubrí que se necesita un comando adicional para iniciar SSH en el arranque:

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

Algunos mencionaron que este comando:

sudo systemctl enable ssh.service

debe ejecutarse en lugar de este comando:

sudo systemctl enable ssh
adambg
fuente
Ubuntu 18, ninguno funcionó. Requerirme un inicio de sesión desde la GUI para poder ssh desde otra máquina.
Deepdebugging