¿Hay alguna forma práctica de acceder externamente (ssh) a un servidor (ejecutado como VM) sin usar una dirección IP estática?

Asumiendo Linux / Unix box debido a “SSH

En lo que respecta a la práctica, si ya tiene acceso a un servidor web, puede escribir un Bash / cualquier script que se ejecute en su servidor SSH que se ejecute en un intervalo (por ejemplo, temporizador Systemd o trabajo cron) que descubra al público Dirección IP del servidor y luego lo carga en un archivo de texto o página web en el servidor web.

Manera fácil de obtener su dirección IP externa en Linux:

  curl icanhazip.com

Si no tiene cURL instalado:

  wget -qO - icanhazip.com

Básicamente, cualquier comando que pueda obtener una página web de Internet puede usarse para determinar la dirección IP pública de su servidor.

Ambos comandos anteriores envían un texto a STDOUT.

Puede asignar esto fácilmente a una variable en un script Bash:

  MY_IP = $ (curl icanhazip.com)

La forma en que carga esta información en el servidor web depende de usted, es fácil, por ejemplo, con cURL nuevamente:

  curl -T myip.txt ftp: // nombre de usuario: [correo electrónico protegido] / remotedir /

Poniendolo todo junto:

  #! / bin / bash
 # Determine la dirección IP y cárguela en el servidor web

 # Cambiar las variables en consecuencia

 DST = "/ tmp / my-ip.txt"
 USUARIO = "ejemplo"
 PASS = "ejemplo"
 SERVIDOR = "ejemplo.com"
 REMOTEPATH = "ejemplo"

 # NOTA: para ver la salida del comando, elimine las partes 2> / dev / null

 curl http://icanhazip.com> "$ {DST}" 2> / dev / null

 si [$?  -eq 0 -a -s "$ {DST}"];  luego

	 curl -q --connect-timeout 5 -T "$ {DST}" "ftp: // $ {USER}: $ {PASS} @ $ {SERVER} / $ {REMOTEPATH}" 2> / dev / null

	 si [$?  -eq 0];  luego

		 echo "Archivo cargado correctamente con mi dirección IP = $ (cat" $ {DST} ") a $ {SERVER}"

	 más

		 echo "No se puede cargar el archivo de dirección IP a $ {SERVER}"

		 salida 1
	 fi

 más

	 echo "No se puede determinar la dirección IP"

	 salida 1
 fi

Respondí algo similar esta mañana: ¿De dónde y cómo puedo asignar un nombre de dominio a un servidor Linux sin una dirección IP pública / estática?

Concéntrese en la parte DDNS, ya que es lo más relevante para su pregunta.

Si su única preocupación es ssh, entonces si tiene un host con una dirección estática a través de la cual puede llegar de manera confiable al servidor de la VM, entonces puede usar el host con la dirección estática como host de bastión para llegar a la VM.

Sí, una solución decente es el DNS dinámico. Aquí hay un proveedor gratuito (nota, este es solo el primero que encontré en una búsqueda de Google) Servicios DNS administrados.