Solución de problemas de SSH

En ciertas condiciones, es posible que una instancia de Google Compute Engine ya no acepte conexiones SSH. Hay muchas razones por las que esto podría suceder. Algunas causas comunes de problemas de conexión SSH son las siguientes:

  • La instancia tiene el disco lleno. Verifica tu espacio en disco y límpialo según sea necesario.
  • El daemon sshd no está configurado correctamente. Revisa la guía del usuario de tu sistema operativo para asegurarte de que el archivo ssh_d esté configurado correctamente.
  • OS Login está habilitado en la instancia. No puedes utilizar las Llaves SSH y OS Login para conectarte a una instancia. Si OS Login está habilitado, la conexión con Llaves SSH basadas en metadatos está inhabilitada.

En este tema, se describen consejos y enfoques para solucionar y resolver problemas comunes de SSH.

Requisitos

Puedes ejecutar la mayoría de los pasos para la solución de problemas desde tu estación de trabajo local. Para usar una estación de trabajo local de Linux o Windows a fin de solucionar problemas de una instancia de VM, primero debes prepararla.

Prepara tu estación de trabajo siguiendo estos pasos:

  • Realiza una actualización a la versión más reciente de la herramienta de línea de comandos de gcloud o instálala.
  • Instala la herramienta nmap de descubrimiento de red y de auditoría de seguridad para tu sistema operativo. Utilizarás esta herramienta para probar la conexión de red a tu instancia de VM.
  • Configura las variables de entorno.

Configura las variables de entorno

Puedes establecer variables de entorno para cualquier parámetro que pueda usarse con frecuencia en esta guía de solución de problemas, como el nombre de la instancia y el nombre del disco de arranque persistente de la instancia afectada.

Configura variables de entorno en tu estación de trabajo local.

Linux o macOS

En una estación de trabajo de Linux o macOS, usa el comando export.

export PROB_INSTANCE='[INSTANCE_NAME]'
export BOOT_DISK='[BOOT_DISK_NAME]'

donde:

  • [INSTANCE_NAME] es el nombre de la instancia cuyos problemas estás solucionando.
  • [BOOT_DISK_NAME] es el nombre del disco de arranque persistente de la instancia cuyos problemas estás solucionando.

Por ejemplo, si tu instancia se llama instance1 y tu disco de arranque se llama disk1, ejecuta los siguientes comandos:

export PROB_INSTANCE='instance1'
export BOOT_DISK='disk1'

Windows

En el SO Windows, usa el comando set.

set PROB_INSTANCE='[INSTANCE_NAME]'
set BOOT_DISK='[BOOT_DISK_NAME]'

donde:

  • [INSTANCE_NAME] es el nombre de la instancia cuyos problemas estás solucionando.
  • [BOOT_DISK_NAME] es el nombre del disco de arranque persistente de la instancia cuyos problemas estás solucionando.

Por ejemplo, si tu instancia se llama instance1 y tu disco de arranque se llama disk1, ejecuta los siguientes comandos:

set PROB_INSTANCE='instance1'
set BOOT_DISK='disk1'

Prueba la conectividad

Es posible que no puedas acceder mediante SSH a una instancia de VM debido a problemas de conectividad relacionados con firewalls, con la conexión de red o con la Cuenta de usuario. Sigue los pasos de esta sección para identificar cualquier problema de conectividad.

Verifica las reglas de tu firewall

Google Compute Engine aprovisiona cada proyecto con un conjunto predeterminado de reglas de firewall que permiten el tráfico SSH. Si la regla de firewall predeterminada que permite conexiones SSH se quita de alguna manera, no podrás acceder a tu instancia. Verifica la lista de firewalls con la herramienta de línea de comandos de gcloud compute y asegúrate de que la regla default-allow-ssh esté presente.

En tu estación de trabajo local, ejecuta el siguiente comando:

gcloud compute firewall-rules list

Si falta la regla de firewall, agrégala de nuevo:

gcloud compute firewall-rules create default-allow-ssh --allow tcp:22

Prueba la conexión de red

Puedes usar la herramienta nmap para conectarte a la instancia en el puerto 22 y ver si la conexión de red funciona. Si te conectas y ves 22/tcp open ssh, tu conexión de red funciona y puedes descartar problemas de firewall.

  1. Usa la herramienta de gcloud a fin de obtener la natIP externa para la instancia:

    gcloud compute instances describe $PROB_INSTANCE --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
    198.51.100.1
    
  2. Prueba la conexión de red a tu instancia.

    Ejecuta el comando nmap para probar la conexión de red a tu instancia:

    nmap [EXTERNAL_IP]
    

    donde [EXTERNAL_IP] es la IP externa de la instancia.

    Por ejemplo, si la instancia tiene la IP externa 198.51.100.1, ejecuta el siguiente comando:

    user@local:~$  nmap 198.51.100.1
    
    Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-18 16:04 Greenwich Standard Time
    Nmap scan report for 229.30.196.35.bc.googleusercontent.com (198.51.100.1)
    Host is up (0.0061s latency).
    Not shown: 998 filtered ports
    PORT     STATE  SERVICE
    22/tcp   open   ssh
    Nmap done: 1 IP address (1 host up) scanned in 6.22 seconds
    

Conéctate como un usuario diferente

El problema que impide el acceso puede estar limitado a tu cuenta de usuario. Por ejemplo, los permisos en el archivo ~/.ssh/authorized_keys en la instancia no se configuraron correctamente para el usuario.

Especifica otro nombre de usuario con la solicitud SSH para intentar acceder como un usuario diferente con la herramienta de gcloud. La herramienta de gcloud actualizará los metadatos del proyecto para agregar al usuario nuevo y permitir el acceso SSH.

user@local:~$ gcloud compute ssh [USER]@$PROB_INSTANCE

donde [USER] es un nombre de usuario nuevo con el cual acceder.

Depura el problema en la consola en serie

En algunos casos, puedes encontrar errores de conexión cuando revisas los registros de la consola en serie. Puedes acceder a la consola en serie desde tu estación de trabajo local con un navegador.

Habilita el acceso de lectura y escritura a la consola en serie de una instancia para poder acceder a la consola y solucionar problemas con la instancia. Esto es particularmente útil cuando no puedes acceder mediante SSH o cuando la instancia no tiene conexión a la red. La consola en serie permanece accesible en ambas situaciones.

Para saber cómo habilitar el acceso interactivo y conectarte a la consola en serie de una instancia, lee Interactúa con la consola en serie.

Inspecciona la instancia de VM sin cerrarla

Es posible que tengas una instancia a la que no puedas conectarte que siga entregando tráfico de producción de forma correcta. En este caso, es posible que desees inspeccionar el disco sin interrumpir la instancia.

A fin de inspeccionar la instancia, deberás tomar una instantánea del disco de arranque, crear un disco nuevo a partir de esa instantánea, crear una instancia temporal y, por último, conectar y activar el disco persistente nuevo en la instancia temporal para solucionar los problemas del disco.

  1. Crea una red de VPC nueva para alojar la instancia clonada:

    gcloud compute networks create debug-network
    
  2. Agrega una regla de firewall para permitir conexiones SSH a la red:

    gcloud compute firewall-rules create debug-network-allow-ssh --allow tcp:22
    
  3. Crea una instantánea del disco de arranque.

    gcloud compute disks snapshot $BOOT_DISK --snapshot-name debug-disk-snapshot
    
  4. Crea un disco nuevo con la instantánea que acabas de crear:

    gcloud compute disks create example-disk-debugging --source-snapshot debug-disk-snapshot
    
  5. Crea una instancia de depuración nueva sin una dirección IP externa:

    gcloud compute instances create debugger --network debug-network --no-address
    
  6. Conecta el disco de depuración a la instancia:

    gcloud compute instances attach-disk debugger --disk example-disk-debugging
    
  7. Sigue las instrucciones para conectarte a una instancia sin una dirección IP externa.

  8. Una vez que iniciaste sesión en la instancia del depurador, soluciona los problemas de la instancia. Por ejemplo, puedes ver los registros de instancias:

    $ sudo su -
    
    $ mkdir /mnt/$PROB_INSTANCE
    
    $ mount /dev/disk/by-id/scsi-0Google_PersistentDisk_example-disk-debugging /mnt/$PROB_INSTANCE
    
    $ cd /mnt/$PROB_INSTANCE/var/log
    
    # Identify the issue preventing ssh from working
    $ ls
    

Usa una secuencia de comandos de inicio

Si nada de lo anterior ayudó, puedes crear una secuencia de comandos de inicio para recopilar información inmediatamente después de que se inicie la instancia. Sigue las instrucciones para ejecutar una secuencia de comandos de inicio.

Después, también será necesario que restablezcas la instancia antes de que tengan efecto los metadatos con el comando gcloud compute instances reset. De manera alternativa, también puedes recrear la instancia con una secuencia de comandos de inicio de diagnóstico:

  1. Ejecuta gcloud compute instances delete con el marcador --keep-disks.

    gcloud compute instances delete $PROB_INSTANCE --keep-disks boot
    
  2. Agrega una instancia nueva con el mismo disco y especifica la secuencia de comandos de inicio.

    gcloud compute instances create new-instance --disk name=$BOOT_DISK,boot=yes --startup-script-url URL
    

Como punto de partida, puedes usar la secuencia de comandos compute-ssh-diagnosis para recopilar información de diagnóstico de los problemas más comunes.

Usa el disco en una instancia nueva

Si los otros pasos en este documento no funcionaron y necesitas recuperar datos de tu disco de arranque persistente, puedes desconectar el disco de arranque y, luego, conectarlo como disco secundario en una nueva instancia.

gcloud compute instances delete $PROB_INSTANCE --keep-disks=boot
gcloud compute instances create new-instance --disk name=$BOOT_DISK,boot=yes,auto-delete=no
gcloud compute ssh new-instance
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Compute Engine