Soluciona problemas con la consola en serie


En esta página, se describe cómo habilitar el acceso interactivo a la consola en serie de una instancia para depurar problemas de inicio y red, solucionar problemas de funcionamiento incorrecto, interactuar con GRand Unified Bootloader (GRUB) y realizar otras tareas de solución de problemas.

Una instancia de máquina virtual (VM) tiene cuatro puertos en serie virtuales. Interactuar con un puerto en serie es similar a usar una ventana de la terminal, en la que la entrada y salida están totalmente en modo de texto y no hay interfaz gráfica ni asistencia de mouse. El sistema operativo de la instancia, el BIOS y otras entidades a nivel del sistema a menudo escriben la salida en los puertos en serie y pueden aceptar entradas, como comandos o respuestas a las indicaciones. Por lo general, estas entidades a nivel del sistema usan el primer puerto en serie (puerto 1) que generalmente se denomina consola en serie.

Si solo necesitas ver la salida del puerto en serie sin emitir comandos a la consola en serie, puedes llamar al método getSerialPortOutput o usar Cloud Logging para leer la información que la instancia escribió en su puerto en serie; consulta Visualiza los registros del puerto en serie. Sin embargo, si tienes problemas para acceder a la instancia mediante SSH o necesitas solucionar problemas de una instancia que no está iniciada por completo, puedes habilitar el acceso interactivo a la consola en serie, que te permite conectarte y, también, interactuar con cualquiera de los puertos en serie de la instancia. Por ejemplo, puedes ejecutar comandos directamente y responder a las solicitudes en el puerto en serie.

Cuando habilitas o inhabilitas el puerto en serie, puedes usar cualquier valor booleano que acepte el servidor de metadatos. Para obtener más información, consulta cómo establecer valores booleanos.

Antes de empezar

  • Configura la autenticación si aún no lo hiciste. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar un código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    Selecciona la pestaña para saber cómo planeas usar las muestras en esta página:

    Consola

    Cuando usas la consola de Google Cloud para acceder a los servicios y las APIs de Google Cloud, no necesitas configurar la autenticación.

    gcloud

    1. Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init
    2. Configura una región y una zona predeterminadas.

    REST

    Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

      Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init

Habilita el acceso interactivo en la consola en serie

Habilita el acceso interactivo a la consola en serie para las instancias de VM individuales o un proyecto completo.

Habilita el acceso para un proyecto

Cuando habilitas el acceso interactivo de la consola en serie en un proyecto, se habilita el acceso para todas las instancias de VM que forman parte de ese proyecto.

De forma predeterminada, el acceso interactivo al puerto en serie está inhabilitado. También puedes inhabilitarlo de forma explícita si estableces la clave serial-port-enable en FALSE. En cualquier caso, la configuración por instancia anula la configuración a nivel de proyecto o la predeterminada.

Console

  1. En la consola de Google Cloud, ve a la página Metadatos.

    Ir a metadatos

  2. Haz clic en Editar para editar entradas de metadatos.
  3. Agrega una entrada nueva que use la clave serial-port-enable y el valor TRUE.
  4. Guarda los cambios.

gcloud

Con Google Cloud CLI, escribe el comando project-info add-metadata de la siguiente manera:

gcloud compute project-info add-metadata \
    --metadata serial-port-enable=TRUE

REST

En la API, realiza una solicitud al método projects().setCommonInstanceMetadata y proporciona la clave serial-port-enable con un valor de TRUE, como se indica a continuación:

{
 "fingerprint": "FikclA7UBC0=",
 "items": [
  {
   "key": "serial-port-enable",
   "value": "TRUE"
  }
 ]
}

Habilita el acceso para una instancia de VM

Habilita el acceso interactivo a la consola en serie para una instancia específica. Una configuración por instancia, si existe, anula cualquier configuración a nivel de proyecto. También puedes inhabilitar el acceso para una instancia específica si estableces serial-port-enable en FALSE, en lugar de TRUE, incluso si el acceso está habilitado a nivel del proyecto. De manera similar, puedes habilitar el acceso para una o más instancias, incluso si está inhabilitado en el proyecto, de forma explícita o predeterminada.

Console

  1. En la consola de Google Cloud, ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. Haz clic en la instancia para la que deseas habilitar el acceso.
  3. Haz clic en Editar.
  4. En la sección Acceso remoto, activa o desactiva la casilla de verificación Habilitar la conexión a los puertos en serie.
  5. Guarda los cambios.

gcloud

Con Google Cloud CLI, escribe el comando instances add-metadata y reemplaza instance-name por el nombre de tu instancia.

gcloud compute instances add-metadata instance-name \
    --metadata serial-port-enable=TRUE

REST

En la API, realiza una solicitud al método instances().setMetadata con la clave serial-port-enable y un valor de TRUE, de la siguiente manera:

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances/example-instance/setMetadata
{
 "fingerprint": "zhma6O1w2l8=",
 "items": [
  {
   "key": "serial-port-enable",
   "value": "TRUE"
  }
 ]
}

Conexión a una consola en serie

Después de habilitar el acceso interactivo para la consola en serie de una instancia, puedes conectarte a ella.

Compute Engine ofrece una puerta de enlace de consola en serie global y puertas de enlace de consola en serie regionales para cada región de Google Cloud. Puedes conectarte a la consola en serie de una VM mediante la puerta de enlace global o regional; sin embargo, recomendamos la puerta de enlace regional para obtener una mejor confiabilidad.

Cuando te conectas a la consola en serie mediante la consola de Google Cloud, te conectas de forma automática a la consola en serie regional. Cuando usas Google Cloud CLI, puedes elegir entre la puerta de enlace regional o global. Las conexiones a través de otros clientes SSH solo son compatibles con la puerta de enlace global.

La consola en serie autentica a los usuarios con claves SSH. En particular, debes agregar la llave SSH pública a los metadatos del proyecto o de la instancia y almacenar la clave privada en la máquina local desde la que deseas conectarte. La CLI de gcloud y la consola de Google Cloud agregan de forma automática claves SSH al proyecto de forma automática. Si usas un cliente de terceros, es posible que debas agregar llaves SSH de forma manual.

Console

Para conectarte a la consola en serie regional de una VM, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Instancias de  VM.

    Ir a la página Instancias de VM

  2. Haz clic en la instancia a la que deseas conectarte.
  3. En Acceso remoto, haz clic en Conectar a la consola en serie para conectarte al puerto predeterminado (puerto 1).
  4. Si deseas conectarte a otro puerto en serie, haz clic en la flecha hacia abajo junto al botón Conectar a consola en serie y cambia el número de puerto según corresponda.
  5. Para las instancias de Windows, abre el menú desplegable junto al botón y conéctate al Puerto 2 para acceder a la consola en serie.

gcloud

Para conectarte a la consola en serie regional o global de una VM, usa uno de los siguientes comandos:

Reemplaza lo siguiente:

  • VM_NAME: El nombre de la VM a cuya consola en serie deseas conectarte.
  • REGION: La región de la VM a cuya consola en serie deseas conectarte.
  • PORT_NUMBER: el número de puerto que deseas conectar. Para las VM de Linux, usa 1. En las VMs de Windows, usa 2. Para obtener más información sobre los números de puerto, consulta la sección Descripción de la numeración de puertos en serie.

Otros clientes SSH

Puedes conectarte a la consola en serie de una instancia con otros clientes SSH de terceros, siempre y cuando el cliente te permita conectarte al puerto TCP 9600.

Por ejemplo, el siguiente comando SSH se conecta al puerto en serie predeterminado (1) de una instancia llamada example-instance con el nombre de usuario jane en un proyecto con el ID myproject. La instancia está en la zona us-central1-f. Reemplaza private-ssh-key-file por el archivo de llaves SSH privadas de la instancia.

ssh -i private-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane@ssh-serialport.googleapis.com
 

En detalle, puedes conectarte a la consola en serie de una instancia con la siguiente información de acceso y dirección:

project-id.zone.instance-name.username.options@ssh-serialport.googleapis.com

Reemplaza los siguientes elementos:

  • project-id: el ID del proyecto para esta instancia
  • zone: la zona de la instancia
  • instance-name: el nombre de la instancia
  • username: el nombre de usuario que usas para conectarte a la instancia Por lo general, este es el nombre de usuario en tu máquina local.
  • options: opciones adicionales que puedes especificar para esta conexión (por ejemplo, puedes especificar un puerto en serie determinado y cualquier opción avanzada. El número de puerto puede ser del 1 al 4, inclusive. Para obtener más información sobre los números de puerto, consulta la sección Descripción de la numeración de puertos en serie. Si se omite, te conectarás al puerto en serie 1)

Si te conectas a una instancia de VM de Windows, hazlo mediante el puerto 2 con el siguiente comando:

ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.port=2@ssh-serialport.googleapis.com

Si tienes problemas para conectarte mediante un cliente SSH de terceros, puedes ejecutar el comando gcloud compute connect-to-serial-port con la opción de línea de comandos --dry-run para ver el comando SSH que se habría ejecutado de forma automática. Luego, puedes comparar las opciones con el comando que estás usando.

Configura una conexión segura

Cuando usas un cliente SSH de terceros que no es Google Cloud CLI, puedes asegurarte de que estás protegido contra el robo de identidad o los ataques de intermediarios si verificas la clave SSH del servidor del puerto en serie de Google. Si deseas configurar el sistema para que verifique la clave SSH del servidor, sigue estos pasos:

  1. Descarga la Llave SSH del servidor del puerto en serie de Google.
  2. Abre tu archivo de hosts conocidos; por lo general, se ubica en ~/.ssh/known_hosts.
  3. Agrega el contenido de la llave SSH del servidor con ssh-serialport.googleapis.com antepuesto a la clave. Por ejemplo, si la clave del servidor contiene la línea ssh-rsa AAAAB3NzaC1yc..., entonces ~/.ssh/known_hosts debería tener una línea como la siguiente:

    ssh-serialport.googleapis.com ssh-rsa AAAAB3NzaC1yc...

Por motivos de seguridad, a veces Google puede cambiar la llave SSH del servidor del puerto en serie de Google. Si el cliente no puede autenticar la clave del servidor, finaliza inmediatamente el intento de conexión y completa los pasos anteriores para descargar una llave SSH nueva del servidor del puerto en serie de Google.

Si después de actualizar la clave de host, continúas recibiendo un error de autenticación de host de tu cliente, debes detener los intentos de conexión al puerto en serie y comunicarte con la Atención al cliente de Google. No proporciones ninguna credencial a través de una conexión en la que haya fallado la autenticación del host.

Desconéctate de la consola en serie

Para desconectarte de la consola en serie, sigue estos pasos:

  1. Presiona la tecla ENTER.
  2. Escribe ~. (virgulilla, seguido de un punto).

Puedes descubrir otros comandos si escribes ~? o examinas la página del manual para SSH:

man ssh

No intentes desconectarte mediante ninguno de los siguientes métodos:

  • La combinación de teclas CTRL+ALT+DELETE o combinaciones similares. Esto no funciona porque la consola en serie no reconoce combinaciones de teclado de computadoras de escritorio.

  • El comando exit o logout no funciona porque el invitado no conoce ninguna conexión de red o módem. El uso de este comando hace que la consola se cierre y se vuelva a abrir, y permanezcas conectado a la sesión. Si deseas habilitar los comandos exit y logout para la sesión, configura la opción on-dtr-low.

Conéctate a una consola en serie con un mensaje de acceso

Si estás intentando solucionar un problema con una instancia que se inició por completo, o un problema que ocurre después de que la VM se inició más allá del modo de usuario único, es posible que se te solicite información de acceso cuando intentes acceder a la consola en serie.

De forma predeterminada, las imágenes del sistema de Linux que proporciona Google no están configuradas para permitir accesos basados en contraseña de usuarios locales. Sin embargo, las imágenes de Windows que proporciona Google están configuradas para permitir accesos basados en contraseña de usuarios locales.

Si tu VM ejecuta una imagen que está preconfigurada con accesos al puerto en serie, debes configurar una contraseña local en la VM para poder acceder a la consola en serie, si se solicita. Puedes configurar una contraseña local después de conectarte a la VM o mediante una secuencia de comandos de inicio.

Configura una contraseña local mediante una secuencia de comandos de inicio

Puedes usar una secuencia de comandos de inicio para configurar una contraseña local que te permita conectarte a la consola en serie durante o después de la creación de la VM.

En las siguientes instrucciones, se describe cómo configurar una contraseña local después de la creación de la VM.

  1. En la consola de Google Cloud, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Selecciona la VM para la que deseas agregar la contraseña local.

  3. Haga clic en Editar.

    Linux

    1. Ve a la sección Metadatos > Automatización.

    2. Si la VM tiene una secuencia de comandos de inicio existente, cópiala y pégala en un lugar seguro.

    3. Agrega la siguiente secuencia de comandos de inicio:

      #!/bin/bash
      useradd USERNAME
      echo USERNAME:PASSWORD | chpasswd
      usermod -aG google-sudoers USERNAME
      

      Reemplaza lo siguiente:

      • USERNAME: El nombre de usuario que deseas agregar
      • PASSWORD: la contraseña del nombre de usuario. Evita las contraseñas simples, ya que algunos sistemas operativos pueden requerir una longitud y complejidad mínimas de contraseña.

    Windows

    1. Navega a la sección Metadatos personalizados.
    2. Si la VM tiene una secuencia de comandos de inicio existente, cópiala y pégala en un lugar seguro.
    3. Haz clic en Agregar elemento.
    4. En el campo Clave, escribe windows-startup-script-cmd.
    5. En el campo Valor, lo siguiente:

      net user USERNAME PASSWORD /ADD /Y
      net localgroup administrators USERNAME /ADD
      

      Reemplaza lo siguiente:

      • USERNAME: El nombre de usuario que deseas agregar
      • PASSWORD: La contraseña del nombre de usuario
  4. Haz clic en Guardar.

  5. Para reiniciar la VM, haz clic en Restablecer. Para obtener más información, consulta Restablece una VM.

  6. Conéctate a la consola en serie.

  7. Ingresa tu información de acceso cuando se te solicite.

  8. Quita la secuencia de comandos de inicio de la VM después de crear el usuario.

Configura una contraseña local mediante passwd en la VM

En las siguientes instrucciones, se describe cómo configurar una contraseña local para un usuario en una VM para que pueda acceder a la consola en serie de esa VM con la contraseña especificada.

  1. Conéctate a la VM. Reemplaza instance-name por el nombre de tu instancia.

    gcloud compute ssh instance-name
  2. En la VM, crea una contraseña local con el siguiente comando. Esto establece una contraseña para el usuario con el que accediste actualmente.

    sudo passwd $(whoami)
  3. Sigue las indicaciones para crear una contraseña.

  4. A continuación, debes salir de la instancia y conectarte a la consola en serie.

  5. Ingresa tu información de acceso cuando se te solicite.

Configura el acceso en otros puertos en serie

Los mensajes de acceso se habilitan en el puerto 1 de forma predeterminada en la mayoría de los sistemas operativos Linux. Sin embargo, el puerto 1 puede verse sobrecargado cuando registra datos y otra información que se imprime en el puerto. En su lugar, puedes optar por habilitar una solicitud de acceso en otro puerto, como el puerto 2 (ttyS1), mediante la ejecución de uno de los siguientes comandos en la VM. Puedes ver una lista de puertos disponibles para una VM en la descripción de la numeración de puertos en serie.

La siguiente tabla detalla imágenes preconfiguradas con acceso a consola en serie y los puertos predeterminados.

Sistema operativo Puertos con una solicitud de acceso según la configuración predeterminada Administración de servicio
CentOS 6 1 upstart
CentOS 7 1 systemd
CoreOS 1 systemd
COS 1 systemd
Debian 8 1 systemd
Debian 9 1 systemd
OpenSUSE 13 1 systemd
OpenSUSE Leap 1 systemd
RHEL 6 1 upstart
RHEL 7 1 systemd
SLES 11 1 sysvinit
SLES 12 1 systemd
Ubuntu 14.04 1 upstart
Ubuntu 16.04 1 systemd
Ubuntu 17.04 1 systemd
Ubuntu 17.10 1 systemd
Windows COM2 No aplica

Para habilitar las solicitudes de acceso en puertos en serie adicionales, sigue las instrucciones que se muestran a continuación.

systemd

Para los sistemas operativos Linux que usan systemd, haz lo siguiente:

  • Habilita el servicio de forma temporal hasta el siguiente reinicio:

    sudo systemctl start serial-getty@ttyS1.service
  • Habilita el servicio de forma permanente a partir del siguiente reinicio:

    sudo systemctl enable serial-getty@ttyS1.service

upstart

Para los sistemas operativos Linux que usan upstart, haz lo siguiente:

  1. Para crear un archivo /etc/init/ttyS1.conf nuevo y reflejar ttyS1, copia y modifica un archivo ttyS0.conf existente. Por ejemplo:

    • En Ubuntu 14.04, crea el siguiente archivo:

      sudo sh -c "sed -e s/ttyS0/ttyS1/g < /etc/init/ttyS0.conf > /etc/init/ttyS1.conf"
    • En RHEL 6.8 y CentOS 6.8, haz lo siguiente:

      sudo sh -c "sed -ne '/^# # ttyS0/,/^# exec/p'  < /etc/init/serial.conf  | sed -e 's/ttyS0/ttyS1/g' -e 's/^# *//' > /etc/init/ttyS1.conf"
  2. Inicia una ventana de acceso en ttyS1 sin reiniciar:

    sudo start ttyS1

sysvinit

Para los sistemas operativos Linux que usan sysvinit, ejecuta el siguiente comando:

 sudo sed -i~ -e &#39;s/^#T([01])/T\1/&#39; /etc/inittab
 sudo telinit q

Descripción de la numeración de puertos en serie

Cada instancia de máquina virtual tiene cuatro puertos en serie. Para mantener la coherencia con la API de getSerialPortOutput, cada puerto está numerado del 1 al 4. Linux y otros sistemas similares numeran sus puertos en serie del 0 al 3. Por ejemplo, en muchas imágenes del sistema operativo, los dispositivos correspondientes son /dev/ttyS0 a /dev/ttyS3. Windows hace referencia a los puertos en serie como COM1 a COM4. Para conectarte a lo que Windows considera COM3 y Linux considera ttyS2, debes especificar el puerto 3. Usa la siguiente tabla para saber a qué puerto deseas conectarte.

Puertos en serie de la instancia de máquina virtual Puertos en serie estándar de Linux Puertos COM de Windows
1 /dev/ttyS0 COM1
2 /dev/ttyS1 COM2
3 /dev/ttyS2 COM3
4 /dev/ttyS3 COM4

Ten en cuenta que muchas imágenes de Linux usan el puerto 1 (/dev/ttyS0) para registrar los mensajes de kernel y los programas del sistema.

Envía una interrupción en serie

La función clave Magic SysRq te permite realizar tareas de bajo nivel, sin importar el estado del sistema. Por ejemplo, con la función clave Magic SysRq puedes sincronizar y desactivar sistemas de archivos, reiniciar la instancia y finalizar procesos.

Para enviar un comando Magic SysRq mediante una interrupción serial simulada, sigue estos pasos:

  1. Presiona la tecla ENTER.
  2. Escribe ~B (virgulilla, seguido de B mayúscula).
  3. Escribe el comando Magic SysRq.

Visualiza registros de auditoría de la consola en serie

Compute Engine proporciona registros de auditoría para realizar el seguimiento de quién se conectó y desconectó de la consola en serie de una instancia. Para ver los registros, debes tener permisos del Visor de registros o ser un visualizador o editor de proyecto.

  1. En la consola de Google Cloud, ve a la página Explorador de registros.

    Ir al Explorador de registros

  2. Expande el menú desplegable y elige GCE VM Instance.
  3. En la barra de búsqueda, escribe ssh-serialport.googleapis.com y presiona Intro.
  4. Aparecerá una lista de registros de auditoría. Los registros describen las conexiones y desconexiones de una consola en serie. Expande cualquiera de las entradas para obtener más información:

    Registros de auditoría de la consola en serie

En cualquiera de los registros de auditoría, puedes hacer lo siguiente:

  1. Expandir la propiedad protoPayload
  2. Buscar methodName para ver la actividad a la que se aplica este registro (ya sea una solicitud de conexión o desconexión). Por ejemplo, si este registro rastrea una desconexión de la consola en serie, el nombre del método dirá "google.ssh-serialport.v1.disconnect". Del mismo modo, un registro de conexión diría "google.ssh-serialport.v1.connect". Se registra una entrada de registro de auditoría al principio y al final de cada sesión en la consola en serie.

Existen diferentes propiedades de registro de auditoría para distintos tipos de registro. Por ejemplo, los registros de auditoría relacionados con conexiones tienen propiedades específicas de los registros de conexión, mientras que los registros de auditoría para desconexiones tienen su propio conjunto de propiedades. Existen ciertas propiedades de registro de auditoría que también se comparten entre ambos tipos de registro.

Todos los registros de la consola en serie

En la siguiente tabla, se proporcionan propiedades de registro de auditoría y sus valores para todos los registros de la consola en serie:

Propiedad Valor
requestMetadata.callerIp Indica la dirección IP y el número de puerto desde el que se originó la conexión.
serviceName ssh-serialport.googleapis.com
resourceName Indica una string que contiene el ID del proyecto, la zona, el nombre de la instancia y el número de puerto en serie para señalar a qué consola en serie pertenece. Por ejemplo, projects/myproject/zones/us-east1-a/instances/example-instance/SerialPort/2 es el puerto 2, también conocido como COM2 o /dev/ttyS1, para la instancia example-instance.
resource.labels Indica las propiedades que identifican el ID de la instancia, la zona y el ID del proyecto.
timestamp Indica una marca de tiempo que muestra cuándo comenzó o terminó la sesión.
severity NOTICE
operation.id Indica una string de ID que identifica la sesión de forma exclusiva; puedes usarla para asociar una entrada de desconexión con la entrada de conexión correspondiente.
operation.producer ssh-serialport.googleapis.com

Registros de conexión

En la siguiente tabla, se proporcionan propiedades de registro de auditoría y sus valores específicos para los registros de conexión:

Propiedad Valor
methodName google.ssh-serialport.v1.connect
status.message Connection succeeded.
request.serialConsoleOptions Indica cualquier opción que se especificó con la solicitud, incluido el número de puerto en serie.
request.@type type.googleapis.com/google.compute.SerialConsoleSessionBegin
request.username Indica el nombre de usuario especificado para esta solicitud. Esto se usa para elegir la clave pública para que coincida.
operation.first TRUE
status.code Para las solicitudes de conexión exitosas, un valor status.code de google.rpc.Code.OK indica que la operación se completó con éxito sin ningún error. Como el valor de enumeración para esta propiedad es 0, la propiedad status.code no se muestra. Sin embargo, cualquier código que comprueba un valor status.code de google.rpc.Code.OK funcionará como se esperaba.

Registros de desconexión

En la siguiente tabla, se proporcionan propiedades de registro de auditoría y sus valores específicos para los registros de desconexión:

Propiedad Valor
methodName google.ssh-serialport.v1.disconnect
response.duration Indica la cantidad de tiempo, en segundos, que duró la sesión.
response.@type type.googleapis.com/google.compute.SerialConsoleSessionEnd
operation.last TRUE

Registros de conexión fallidos

Cuando falla una conexión, Compute Engine crea una entrada de registro de auditoría. Un registro de conexión con errores es muy similar a una entrada de conexión exitosa, pero tiene las siguientes propiedades para indicar una conexión con errores.

Propiedad Valor
severity ERROR
status.code

Indica el código de error canónico de la API de Google que describe mejor el error. A continuación, se detallan los posibles códigos de error que pueden aparecer:

status.message Indica el mensaje legible para esta entrada.

Inhabilita el acceso interactivo a la consola en serie

Para inhabilitar el acceso a la consola en serie interactiva, debes cambiar los metadatos en la instancia o proyecto específico, o establecer una Política de la organización que inhabilite el acceso a la consola en serie interactiva a todas las instancias de VM para uno o más proyectos que forman parte de la organización.

Inhabilita la consola en serie interactiva en una instancia o proyecto en particular

Los propietarios y editores del proyecto, así como los usuarios a los que se les otorgó la función compute.instanceAdmin.v1, pueden inhabilitar el acceso a la consola en serie si cambian los metadatos de la instancia o proyecto en particular. Al igual que para habilitar el acceso a la consola en serie, configura los metadatos de serial-port-enable en FALSE:

serial-port-enable=FALSE

Por ejemplo, mediante Google Cloud CLI, puedes aplicar estos metadatos a una instancia específica de esta manera:

gcloud compute instances add-metadata instance-name \
    --metadata=serial-port-enable=FALSE

Para aplicar los metadatos al proyecto, ejecuta este comando:

gcloud compute project-info add-metadata \
    --metadata=serial-port-enable=FALSE

Inhabilita el acceso a la consola en serie interactiva a través de la política de la organización

Si se te otorgó la función orgpolicy.policyAdmin en la organización, puedes establecer una política de la organización que evite el acceso interactivo a la consola en serie, sin importar si su acceso interactivo está habilitado en el servidor de metadatos. Una vez establecida, la política anula efectivamente la clave de metadatos de serial-port-enable y ningún usuario de la organización o proyecto puede habilitar el acceso interactivo a la consola en serie. De forma predeterminada, esta restricción se establece como FALSE.

La restricción para inhabilitar el acceso interactivo a la consola en serie es la siguiente:

compute.disableSerialPortAccess

Completa las siguientes instrucciones para establecer esta política en la organización. Después de configurarla, puedes otorgar exenciones por proyecto.

gcloud

Para establecer la política con Google Cloud CLI, ejecuta el comando resource-manager enable-enforce. Reemplaza organization-id por el ID de tu organización. Por ejemplo, 1759840282.

gcloud resource-manager org-policies enable-enforce \
    --organization organization-id compute.disableSerialPortAccess

REST

Para establecer una política en la API, realiza una solicitud POST a la URL que aparece a continuación. Reemplaza organization-name con el nombre de tu organización. Por ejemplo, organizations/1759840282.

 POST https://cloudresourcemanager.googleapis.com/v1/organization-name:setOrgPolicy

El cuerpo de la solicitud debe contener un objeto de policy con la siguiente restricción:

"constraint": "constraints/compute.disableSerialPortAccess"

Por ejemplo:

 {
   "policy":
   {
     "booleanPolicy":
     {
       "enforced": TRUE
     },
     "constraint": "constraints/compute.disableSerialPortAccess"
   }
 }
 

La política estará vigente de inmediato, por lo que cualquier proyecto de la organización deja de permitir el acceso interactivo a la consola en serie al instante.

Para inhabilitar la política de forma temporal, usa el comando disable-enforce, como se indica a continuación:

gcloud resource-manager org-policies disable-enforce \
    --organization organization-id compute.disableSerialPortAccess

Como alternativa, puedes realizar una solicitud a la API en la que el cuerpo de la solicitud establezca el parámetro enforced en FALSE:

{
  "policy":
  {
    "booleanPolicy":
    {
      "enforced": FALSE
    },
    "constraint": "constraints/compute.disableSerialPortAccess"
  }
}

Establece la política de la organización a nivel de proyecto

Puedes establecer la misma política de la organización por proyecto. Esto anula la configuración a nivel de la organización.

gcloud

Para desactivar la aplicación de esta política en un proyecto específico, ejecuta el siguiente comando. Reemplaza project-id por el ID del proyecto.

gcloud resource-manager org-policies disable-enforce \
    --project project-id compute.disableSerialPortAccess

Puedes activar la aplicación de esta política. Para ello, usa el comando enable-enforce con los mismos valores.

REST

En la API, realiza una solicitud POST a la siguiente URL para habilitar el acceso interactivo a la consola en serie para el proyecto. Para ello, reemplaza project-id con el ID del proyecto:

POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setOrgPolicy

El cuerpo de la solicitud debe contener un objeto policy con la siguiente restricción:

"constraint": "constraints/compute.disableSerialPortAccess"

Por ejemplo:

{
  "policy":
  {
    "booleanPolicy":
    {
      "enforced": FALSE
    },
    "constraint": "constraints/compute.disableSerialPortAccess"
  }
}

Sugerencias y trucos

  • Si tienes problemas para conectarte mediante un cliente SSH estándar, pero gcloud compute connect-to-serial-port se conecta con éxito, podría resultarte útil ejecutar gcloud compute connect-to-serial-port con la opción de línea de comandos --dry-run para ver el comando SSH que habría ejecutado en tu nombre, y compara las opciones con el comando que usas.

  • Cuando configuras la tasa de bits, también conocida como velocidad en baudios, puedes establecer cualquier tasa de bits que desees, como stty 9600, pero la función, por lo general, fuerza la tasa efectiva a 115,200 bps (~11.5 kb/s). Esto se debe a que muchas imágenes públicas tienen tasas de bits lentas de forma predeterminada, como 9,600 en la consola en serie, y se inician de forma lenta.

  • Algunas imágenes de SO tienen valores predeterminados inconvenientes en el puerto en serie. Por ejemplo, en CentOS 7, el stty icrnl predeterminado para la tecla Intro en la consola es para enviar un CR, también conocido como ^M. La shell de Bash podría ocultar esta información hasta que intentes configurar una contraseña. En ese momento, podrías preguntarte por qué parece detenida en la solicitud password:.

  • Algunas imágenes públicas tienen teclas de control de trabajo que están inhabilitadas de forma predeterminada si conectas una shell a un puerto de ciertas maneras. Algunos ejemplos de estas teclas incluyen ^Z^C. El comando setsid podría corregir esto. De lo contrario, si ves un mensaje job control is disabled in this shell, ten cuidado de no ejecutar comandos que deberás interrumpir.

  • Puede que te resulte útil indicarle al sistema el tamaño de la ventana que usas para que Bash y los editores puedan administrarlo de forma correcta. De lo contrario, podrías experimentar un comportamiento de visualización extraño porque Bash o los editores intentan manipular la visualización en función de suposiciones incorrectas sobre la cantidad de filas y columnas disponibles. Usa el comando stty rows Y cols X y la marca stty -a para ver cuál es la configuración. Por ejemplo: stty rows 60 cols 120 (si la ventana tiene 120 caracteres por 60 líneas).

  • Si, por ejemplo, te conectas con SSH de la máquina A a la máquina B y, luego, a la máquina C, etc., creando una sesión SSH anidada, y deseas usar comandos de virgulilla (~) para desconectar o enviar una señal de interrupción en serie, tendrás que agregar suficientes caracteres de virgulilla adicionales al comando para llegar al cliente SSH correcto. El cliente SSH interpretará un comando que sigue a una única virgulilla en la máquina A; un comando que sigue dos virgulillas consecutivas (Intro ~~) es interpretado por el cliente en la máquina B, y así sucesivamente. Solo debes presionar Intro una vez porque eso se pasa completamente hasta el destino SSH más interno. Esto es verdadero para cualquier uso de clientes SSH que proporcionen la función de escape de virgulilla.

    Si no recuerdas cuántos caracteres de virgulilla necesitas, presiona la tecla Intro y, luego, escribe los caracteres uno a la vez hasta que la instancia repita la virgulilla. Esta repetición indica que llegaste al final de la cadena y ahora sabes que para enviar un comando de virgulilla al cliente SSH más anidado, necesitas una virgulilla menos que la cantidad que escribiste.

Opciones avanzadas

Controla conexiones máximas

Puedes establecer la propiedad max-connections para controlar cuántas conexiones simultáneas se pueden hacer a este puerto en serie a la vez. El número predeterminado y máximo de conexiones es 5. Por ejemplo:

gcloud compute connect-to-serial-port instance-name \
    --port port-number \
    --extra-args max-connections=3
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.max-connections=3@ssh-serialport.googleapis.com

Establece opciones de repetición

De forma predeterminada, cada vez que te conectes a la consola en serie, recibirás una repetición de las últimas 10 líneas de datos, independientemente de que otro cliente SSH haya visto las últimas 10 líneas. Puedes cambiar esta configuración y controlar cuántas y cuáles líneas se muestran si estableces las siguientes opciones:

  • replay-lines=N: Establece N en el número de líneas que deseas repetir. Por ejemplo, si N es 50, entonces, se incluyen las últimas 50 líneas del resultado de la consola.
  • replay-bytes=N: repite los N bytes más recientes. También puedes establecer N en new, que repite todos los resultados que aún no se enviaron a ningún cliente.
  • replay-from=N: repite el resultado a partir de un índice de bytes absoluto que proporciones. Puedes obtener el índice de bytes actual del resultado de la consola en serie mediante una solicitud getSerialPortOutput. Si estableces replay-from, se ignoran todas las demás opciones de repetición.

Con Google Cloud CLI, agrega lo siguiente al comando connect-to-serial-port, en el que N es la cantidad especificada de líneas (o bytes o índice de bytes absolutos, según la opción de repetición que selecciones):

--extra-args replay-lines=N

Si usas un cliente SSH de terceros, proporciona esta opción en tu comando SSH:

ssh -i private-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane.port=3.replay-lines=N@ssh-serialport.googleapis.com

También puedes usar una combinación de estas opciones. Por ejemplo:

replay-lines=N y replay-bytes=new
Repite la cantidad especificada de líneas O todos los resultados que no se enviaron antes a ningún cliente, el que sea mayor. El primer cliente que se conecte con esta combinación de marcas verá el resultado que se envió al puerto en serie, y los clientes que se conecten posteriormente solo verán las últimas N líneas. Ejemplos:
gcloud compute connect-to-serial-port instance-name--port port-number --extra-args replay-lines=N,replay-bytes=new
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.replay-lines=N.replay-bytes=new@ssh-serialport.googleapis.com
replay-lines=N y replay-bytes=M
Repite las líneas hasta el número de líneas o bytes descritos por estas marcas, pero sin superarlo, lo que sea menor. Esta opción no repetirá más de N o M bytes.
gcloud compute connect-to-serial-port instance-name--port port-number --extra-args replay-lines=N,replay-bytes=M
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.replay-lines=N.replay-bytes=M@ssh-serialport.googleapis.com

Maneja los resultados descartados

El resultado 1 MiB más reciente para cada puerto en serie siempre está disponible y, en general, tu cliente SSH no debe perder ningún resultado del puerto en serie. Si, por algún motivo, tu cliente SSH deja de aceptar el resultado durante un período, pero no se desconecta y se produce más de 1 MiB de datos nuevos, es posible que tu cliente SSH pierda algún resultado. Cuando el cliente SSH no acepta datos lo suficientemente rápido para mantenerse al día con el resultado en el puerto de consola en serie, puedes configurar la propiedad de on-dropped-output para determinar cómo se comporta la consola.

Establece cualquiera de las siguientes opciones aplicables con esta propiedad:

  • insert-stderr-note: Inserta una nota en el stderr del cliente SSH que indique que se descartó el resultado. Esta es la opción predeterminada.
  • ignore: Descarta el resultado de forma silenciosa y no realiza ninguna acción.
  • disconnect: Detiene la conexión.

Por ejemplo:

gcloud compute connect-to-serial-port instance-name \
    --port port-number \
    --extra-args on-dropped-output=ignore
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.on-dropped-output=ignore@ssh-serialport.googleapis.com

Habilita la desconexión con los comandos de salida o cierre de sesión

Puedes habilitar la desconexión cuando sales o cierras sesión si configuras la propiedad on-dtr-low para disconnect cuando te conectas a la consola en serie.

En Google Cloud CLI, agrega la siguiente marca al comando connect-to-serial-port:

--extra-args on-dtr-low=disconnect

Si usas un cliente SSH de terceros, proporciona esta opción en tu comando SSH:

ssh -i private-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane.port=3.on-dtr-low=disconnect@ssh-serialport.googleapis.com

Si habilitas la opción disconnect, es posible que tu instancia se desconecte una o más veces cuando la reinicies, puesto que el sistema operativo restablece los puertos en serie cuando se inicia.

La configuración predeterminada para la opción on-dtr-low es none. Si usas la configuración predeterminada none, puedes reiniciar la instancia sin desconectarte de la consola en serie, pero la consola no se desconectará por medios normales, como los comandos exit o logout, o las combinaciones de teclas normales como Ctrl + D.

¿Qué sigue?