Solución de problemas utilizando la consola serie


Esta página describe cómo habilitar el acceso interactivo a la consola serie de una instancia para depurar problemas de arranque y de red, solucionar problemas de instancias que no funcionan correctamente, 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 serie virtuales. Interactuar con un puerto serie es similar a usar una ventana de terminal, en el sentido de que la entrada y salida están completamente en modo texto y no hay interfaz gráfica ni soporte para mouse. El sistema operativo, el BIOS y otras entidades a nivel del sistema de la instancia a menudo escriben resultados en los puertos serie y pueden aceptar entradas como comandos o respuestas a mensajes. Normalmente, estas entidades a nivel de sistema utilizan el primer puerto serie (puerto 1) y el puerto serie 1 a menudo se denomina consola serie.

Si solo necesita ver la salida del puerto serie sin emitir ningún comando a la consola serie, puede llamar al método getSerialPortOutput o usar Cloud Logging para leer la información que su instancia ha escrito en su puerto serie; consulte Visualización de registros del puerto serie . Sin embargo, si tiene problemas para acceder a su instancia a través de SSH o necesita solucionar problemas de una instancia que no está completamente iniciada, puede habilitar el acceso interactivo a la consola serie, que le permite conectarse e interactuar con cualquiera de los puertos serie de su instancia. Por ejemplo, puede ejecutar comandos directamente y responder a indicaciones en el puerto serie.

Cuando habilita o deshabilita el puerto serie, puede usar cualquier valor booleano aceptado por el servidor de metadatos. Para obtener más información, consulte Valores booleanos .

Antes de comenzar

  • Si aún no lo has hecho, configura la autenticación. La autenticación es el proceso mediante el cual se verifica su identidad para acceder a Google Cloud servicios y API. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.
    3. 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.

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      Para obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud .

Habilitar el acceso interactivo en la consola serie

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

Habilitar el acceso a un proyecto

Habilitar el acceso a la consola serie interactiva en un proyecto permite el acceso a todas las instancias de VM que forman parte de ese proyecto.

De forma predeterminada, el acceso al puerto serie interactivo está deshabilitado. También puede desactivarlo explícitamente configurando la clave serial-port-enable en FALSE . En cualquier caso, cualquier configuración por instancia anula la configuración a nivel de proyecto o la configuración predeterminada.

Consola

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

    Ir a Metadatos

  2. Haga clic en Editar para editar las entradas de metadatos.
  3. Agregue una nueva entrada que utilice la clave serial-port-enable y el valor TRUE .
  4. Guarde sus cambios.

nube de gcloud

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

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

DESCANSAR

En la API, realice una solicitud al projects().setCommonInstanceMetadata , proporcionando la clave serial-port-enable con un valor de TRUE :

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

Habilitar el acceso para una instancia de VM

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

Consola

  1. En la consola de Google Cloud, vaya a la página de instancias de VM .

    Vaya a la página de instancias de VM

  2. Haga clic en la instancia para la que desea habilitar el acceso.
  3. Haga clic en Editar .
  4. En la sección Acceso remoto , active la casilla Habilitar conexión a puertos serie .
  5. Guarde sus cambios.

nube de gcloud

Con la CLI de Google Cloud, ingrese el comando instances add-metadata y reemplace instance-name con el nombre de su instancia.

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

DESCANSAR

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

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"
  }
 ]
}

Configurar la consola serie para una instancia básica

Para instancias bare metal, aumente la velocidad de bits, también conocida como velocidad en baudios, para la consola serie a 115.200 bps (~11,5 kB/seg). El uso de una velocidad más lenta da como resultado una salida de consola confusa o faltante.

La configuración del gestor de arranque varía según los sistemas operativos y las versiones del sistema operativo. Consulte la documentación del distribuidor del sistema operativo para obtener instrucciones.

Si modifica la velocidad de bits en la línea de comando para la sesión actual, use un comando similar al siguiente:

console=ttyS0,115200

Si modifica la configuración de GRUB, utilice un comando similar al siguiente:

serial --speed=115200

Asegúrese de actualizar la configuración real del gestor de arranque. Esto se puede hacer con update-grub , grub2-mkconfig o un comando similar.

Conexión a una consola serie

Compute Engine ofrece puertas de enlace de consola serie regionales para cada Google Cloudregión. Después de habilitar el acceso interactivo para la consola serie de una VM, puede conectarse a una consola serie regional.

La consola serie autentica a los usuarios con claves SSH . Específicamente, debe agregar su clave SSH pública a los metadatos del proyecto o instancia y almacenar su clave privada en la máquina local desde la que desea conectarse. La CLI de gcloud y la consola de Google Cloud agregan automáticamente claves SSH al proyecto por ti. Si está utilizando un cliente de terceros, es posible que deba agregar claves SSH manualmente.

Si está utilizando un cliente de terceros, también puede validar la conexión utilizando las claves de host de la consola serie . Cuando utiliza la CLI de Google Cloud para conectarse, la autenticación de la clave de host se realiza automáticamente en su nombre.

Consola

Para conectarse a la consola serie regional de una VM, haga lo siguiente:

  1. En la consola de Google Cloud, vaya a la página de instancias de VM .

    Vaya a la página de instancias de VM

  2. Haga clic en la instancia a la que desea conectarse.
  3. En Acceso remoto , haga clic en Conectar a la consola serie para conectarse al puerto predeterminado (puerto 1).
  4. Si desea conectarse a otro puerto serie, haga clic en la flecha hacia abajo junto al botón Conectar a la consola serie y cambie el número de puerto en consecuencia.
  5. Para instancias de Windows, abra el menú desplegable junto al botón y conéctese al puerto 2 para acceder a la consola serie.

nube de gcloud

Para conectarse a la consola serie regional de una VM, use el comando gcloud compute connect-to-serial-port :

  gcloud compute connect-to-serial-port VM_NAME 
--port=PORT_NUMBER

Reemplace lo siguiente:

  • VM_NAME : el nombre de la VM a cuya consola serie desea conectarse.
  • PORT_NUMBER : el número de puerto al que desea conectarse. Para máquinas virtuales Linux, use 1 , para máquinas virtuales Windows, use 2 . Para obtener más información sobre los números de puerto, consulte Comprender la numeración de puertos serie .

Otros clientes SSH

Puede conectarse a la consola serie de una instancia utilizando otros clientes SSH de terceros, siempre que el cliente le permita conectarse al puerto TCP 9600. Antes de conectarse, opcionalmente puede validar la conexión utilizando las claves de host de la consola serie .

Para conectarse a la consola serie regional de una VM, ejecute uno de los siguientes comandos, según el sistema operativo de su VM:

  • Para conectarse a una máquina virtual Linux:

    ssh -i PRIVATE_SSH_KEY_FILE -p 9600 PROJECT_ID.ZONE.VM_NAME.USERNAME.OPTIONS@REGION-ssh-serialport.googleapis.com
    
  • Para conectarse a una máquina virtual Windows:

    ssh -i PRIVATE_SSH_KEY_FILE -p 9600 PROJECT_ID.ZONE.VM_NAME.USERNAME.OPTIONS.port=2@REGION-ssh-serialport.googleapis.com
    

Reemplace lo siguiente:

  • PRIVATE_SSH_KEY_FILE : la clave SSH privada para la instancia.
  • PROJECT_ID : el ID del proyecto para esta instancia de VM.
  • ZONE : La zona de la instancia de VM.
  • REGION : La región de la instancia de VM.
  • VM_NAME : el nombre de la instancia de VM.
  • USERNAME : El nombre de usuario que está utilizando para conectarse a su instancia. Normalmente, este es el nombre de usuario en su máquina local.
  • OPTIONS : Opciones adicionales que puede especificar para esta conexión. Por ejemplo, puede especificar un determinado puerto serie y especificar 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, consulte Comprender la numeración de puertos serie . Si se omite, se conectará al puerto serie 1.

Si tiene problemas para conectarse mediante un cliente SSH de terceros, puede 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 en su nombre. Luego puedes comparar las opciones con el comando que estás usando.

Validar conexiones de clientes SSH de terceros

Cuando utiliza un cliente SSH de terceros que no es la CLI de Google Cloud, puede asegurarse de estar protegido contra suplantaciones o ataques de intermediarios verificando la clave de host SSH del puerto serie de Google. Para configurar su sistema para verificar la clave de host SSH, complete los siguientes pasos:

  1. Descargue la clave de host SSH para la consola serie que utilizará:

  2. Abra su archivo de hosts conocidos, generalmente ubicado en ~/.ssh/known_hosts .

  3. Agregue el contenido de la clave de host SSH, con el nombre de host del servidor antepuesto a la clave. Por ejemplo, si la clave del servidor us-central1 contiene la línea ssh-rsa AAAAB3NzaC1yc... , entonces ~/.ssh/known_hosts debería tener una línea como esta:

    [us-central1-ssh-serialport.googleapis.com]:9600 ssh-rsa AAAAB3NzaC1yc...

Por razones de seguridad, Google puede cambiar ocasionalmente la clave de host SSH del puerto serie de Google. Si su cliente no puede autenticar la clave del servidor, finalice inmediatamente el intento de conexión y complete los pasos anteriores para descargar una nueva clave de host SSH del puerto serie de Google.

Si, después de actualizar la clave de host, continúa recibiendo un error de autenticación de host de su cliente, detenga los intentos de conectarse al puerto serie y comuníquese con el soporte técnico de Google. No proporcione ninguna credencial a través de una conexión donde la autenticación del host haya fallado.

Desconectarse de la consola serie

Para desconectarse de la consola serie:

  1. Presione la tecla ENTER .
  2. Escribe ~. (tilde, seguida de un punto).

Puedes descubrir otros comandos escribiendo ~? o examinando la página de manual de SSH:

man ssh

No intente desconectarse utilizando ninguno de los siguientes métodos:

  • La combinación de teclas CTRL+ALT+DELETE u otras combinaciones similares. Esto no funciona porque la consola serie no reconoce las combinaciones de teclado de la PC.

  • 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 luego se vuelva a abrir, y usted permanece conectado a la sesión. Si desea habilitar los comandos exit y logout para su sesión, puede habilitarlos configurando la opción on-dtr-low .

Conexión a una consola serie con un mensaje de inicio de sesión

Si está intentando solucionar un problema con una máquina virtual que se inició por completo o intenta solucionar un problema que ocurre después de que la máquina virtual se inició más allá del modo de usuario único, es posible que se le solicite información de inicio de sesión cuando intente acceder a la consola serie.

De forma predeterminada, las imágenes del sistema Linux proporcionadas por Google no están configuradas para permitir inicios de sesión basados ​​en contraseña para usuarios locales. Sin embargo, las imágenes de Windows proporcionadas por Google están configuradas para permitir inicios de sesión basados ​​en contraseña para usuarios locales.

Si su VM ejecuta una imagen que está preconfigurada con inicios de sesión en el puerto serie, debe configurar una contraseña local en la VM para poder iniciar sesión en la consola serie, si se le solicita. Puede configurar una contraseña local después de conectarse a la VM o mediante un script de inicio.

Configurar una contraseña local usando un script de inicio

Puede utilizar una secuencia de comandos de inicio para configurar una contraseña local que le permita conectarse a la consola serie durante o después de la creación de la VM.

Para configurar una contraseña local en una VM existente, seleccione una de las siguientes opciones:

linux

  1. En la consola de Google Cloud, vaya a la página de instancias de VM .

    Ir a instancias de VM

  2. En la columna Nombre , haga clic en el nombre de la VM para la que desea agregar una contraseña local.

    Se abre la página de detalles de la VM.

  3. Haga clic en Editar .

    Se abre la página para editar los detalles de la VM.

  4. En la sección Metadatos > Automatización , haga lo siguiente:

    1. Si la VM tiene un script de inicio existente, elimínelo y guárdelo en un lugar seguro.

    2. Agregue el siguiente script de inicio:

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

      Reemplace lo siguiente:

      • USERNAME : el nombre de usuario que desea agregar.

      • PASSWORD : la contraseña del nombre de usuario. Como algunos sistemas operativos requieren una longitud y complejidad mínimas de contraseña, especifique una contraseña de la siguiente manera:

        • Utilice al menos 12 caracteres.

        • Utilice una combinación de letras mayúsculas y minúsculas, números y símbolos.

  5. Haga clic en Guardar .

    Se abre la página de detalles de la VM.

  6. Haga clic en Restablecer .

  7. Conéctese a la consola serie .

  8. Cuando se le solicite, ingrese su información de inicio de sesión.

ventanas

  1. En la consola de Google Cloud, vaya a la página de instancias de VM .

    Ir a instancias de VM

  2. En la columna Nombre , haga clic en el nombre de la VM para la que desea agregar una contraseña local.

    Se abre la página de detalles de la VM.

  3. Haga clic en Editar .

    Se abre la página para editar los detalles de la VM.

  4. En la sección Metadatos , haga lo siguiente:

    1. Si la máquina virtual tiene un script de inicio existente, guárdelo en un lugar seguro y luego, para eliminarlo, haga clic en Eliminar elemento .

    2. Haga clic en Agregar elemento .

    3. En el campo Clave , ingrese windows-startup-script-cmd .

    4. En el campo Valor , ingrese el siguiente script:

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

      Reemplace lo siguiente:

      • USERNAME : el nombre de usuario que desea agregar.

      • PASSWORD : la contraseña del nombre de usuario. Como algunos sistemas operativos requieren una longitud y complejidad mínimas de contraseña, especifique una contraseña de la siguiente manera:

        • Utilice al menos 12 caracteres.

        • Utilice una combinación de letras mayúsculas y minúsculas, números y símbolos.

  5. Haga clic en Guardar .

    Se abre la página de detalles de la VM.

  6. Haga clic en Restablecer .

  7. Conéctese a la consola serie .

  8. Cuando se le solicite, ingrese su información de inicio de sesión.

Una vez creado el usuario, reemplace el script de inicio con el script de inicio que almacenó en esta sección.

Configurar una contraseña local usando passwd en la VM

Las siguientes instrucciones describen cómo configurar una contraseña local para un usuario en una VM para que el usuario pueda iniciar sesión en la consola serie de esa VM usando la contraseña especificada.

  1. Conéctese a la máquina virtual. Reemplace instance-name con el nombre de su instancia.

    gcloud compute ssh instance-name
  2. En la VM, cree una contraseña local con el siguiente comando. Esto establece una contraseña para el usuario con el que ha iniciado sesión actualmente.

    sudo passwd $(whoami)
  3. Siga las instrucciones para crear una contraseña.

  4. A continuación, cierre sesión en la instancia y conéctese a la consola serie .

  5. Ingrese su información de inicio de sesión cuando se le solicite.

Configurar un inicio de sesión en otros puertos serie

Las solicitudes de inicio de sesión están habilitadas en el puerto 1 de forma predeterminada en la mayoría de los sistemas operativos Linux. Sin embargo, el puerto 1 a menudo puede verse saturado por el registro de datos y otra información que se imprime en el puerto. En su lugar, puede optar por habilitar un mensaje de inicio de sesión en otro puerto, como el puerto 2 (ttyS1), ejecutando uno de los siguientes comandos en su VM. Puede ver una lista de puertos disponibles para una máquina virtual en Descripción de la numeración de puertos serie .

La siguiente tabla enumera imágenes preconfiguradas con un inicio de sesión de consola serie y los puertos predeterminados.

Sistema operativo Puertos con un mensaje de inicio de sesión por defecto Gestión de servicios
CentOS 6 1 upstart
CentOS 7 1 systemd
CoreOS 1 systemd
porque 1 systemd
Debian 8 1 systemd
Debian 9 1 systemd
OpenSUSE 13 1 systemd
Salto de OpenSUSE 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
ventanas COM2 N / A

Para habilitar las solicitudes de inicio de sesión en puertos serie adicionales, complete las siguientes instrucciones.

sistemad

Para sistemas operativos Linux que utilizan systemd :

  • Habilite el servicio temporalmente hasta el próximo reinicio:

    sudo systemctl start serial-getty@ttyS1.service
  • Habilite el servicio permanentemente, comenzando con el próximo reinicio:

    sudo systemctl enable serial-getty@ttyS1.service

advenedizo

Para sistemas operativos Linux que utilizan upstart :

  1. Cree un nuevo archivo /etc/init/ttyS1.conf para reflejar ttyS1 copiando y modificando un archivo ttyS0.conf existente. Por ejemplo:

    • En Ubuntu 14.04:

      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

      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. Comience en un mensaje de inicio de sesión en ttyS1 sin reiniciar:

    sudo start ttyS1

sistemavinit

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

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

Comprender la numeración de puertos serie

Cada instancia de máquina virtual tiene cuatro puertos serie. Para mantener la coherencia con la API getSerialPortOutput , cada puerto está numerado del 1 al 4. Linux y otros sistemas similares numeran sus puertos serie del 0 al 3. Por ejemplo, en muchas imágenes de sistemas operativos, los dispositivos correspondientes son /dev/ttyS0 a /dev/ttyS3 . Windows se refiere a los puertos serie como COM1 a COM4 . Para conectarse a lo que Windows considera COM3 y Linux considera ttyS2 , deberá especificar el puerto 3. Utilice la siguiente tabla para ayudarle a determinar a qué puerto desea conectarse.

Puertos serie de instancia de máquina virtual Puertos 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

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

Enviando una pausa en serie

La función clave Magic SysRq le permite realizar tareas de bajo nivel independientemente del estado del sistema. Por ejemplo, puede sincronizar sistemas de archivos, reiniciar la instancia, finalizar procesos y desmontar sistemas de archivos utilizando la función clave Magic SysRq.

Para enviar un comando Magic SysRq usando una interrupción en serie simulada:

  1. Presione la tecla ENTER .
  2. Escriba ~B (tilde, seguida de B mayúscula).
  3. Escriba el comando Magic SysRq.

Ver registros de auditoría de la consola serie

Compute Engine proporciona registros de auditoría para rastrear quién se ha conectado y desconectado de la consola serie de una instancia. Para ver registros, debe tener permisos para el Visor de registros o ser un visor o editor de proyectos.

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

    Ir al Explorador de registros

  2. Expanda el menú desplegable y seleccione Instancia de VM de GCE .
  3. En la barra de búsqueda, escribe ssh-serialport.googleapis.com y presiona Enter .
  4. Aparece una lista de registros de auditoría. Los registros describen conexiones y desconexiones desde una consola serie. Expanda cualquiera de las entradas para obtener más información.

Para cualquiera de los registros de auditoría, puede:

  1. Expanda la propiedad protoPayload .
  2. Busque 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 serie, el nombre del método diría "google.ssh-serialport.v1.disconnect" . De manera similar, un registro de conexión diría "google.ssh-serialport.v1.connect" . Se registra una entrada del registro de auditoría al principio y al final de cada sesión en la consola serie.

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

Todos los registros de la consola serie

La siguiente tabla proporciona las propiedades del registro de auditoría y sus valores para todos los registros de la consola serie:

Propiedad Valor
requestMetadata.callerIp La dirección IP y el número de puerto desde donde se originó la conexión.
serviceName ssh-serialport.googleapis.com
resourceName Una cadena que contiene el ID del proyecto, la zona, el nombre de la instancia y el número de puerto serie para indicar a qué consola serie pertenece. Por ejemplo, projects/ myproject /zones/us-east1-a/instances/ example-instance /SerialPort/2 es el puerto número 2, también conocido como COM2 o /dev/ttyS1, para la instancia example-instance .
resource.labels Propiedades que identifican el ID de instancia, la zona y el ID del proyecto.
timestamp Una marca de tiempo que indica cuándo comenzó o finalizó la sesión.
severity NOTICE
operation.id Una cadena de identificación que identifica de forma única la sesión; puede utilizar esto para asociar una entrada de desconexión con la entrada de conexión correspondiente.
operation.producer ssh-serialport.googleapis.com

Registros de conexión

La siguiente tabla proporciona propiedades de registro de auditoría y sus valores específicos para registros de conexión:

Propiedad Valor
methodName google.ssh-serialport.v1.connect
status.message Connection succeeded.
request.serialConsoleOptions Cualquier opción que se haya especificado con la solicitud, incluido el número de puerto de serie.
request.@type type.googleapis.com/google.compute.SerialConsoleSessionBegin
request.username El nombre de usuario especificado para esta solicitud. Esto se utiliza para seleccionar la clave pública que coincida.
operation.first TRUE
status.code Para solicitudes de conexión exitosas, un valor de status.code de google.rpc.Code.OK indica que la operación se completó exitosamente sin errores. Debido a que el valor de enumeración para esta propiedad es 0 , la propiedad status.code no se muestra. Sin embargo, cualquier código que verifique un valor de status.code de google.rpc.Code.OK funcionará como se esperaba.

Registros de desconexión

La siguiente tabla proporciona propiedades de registro de auditoría y sus valores específicos para registros de desconexión:

Propiedad Valor
methodName google.ssh-serialport.v1.disconnect
response.duration 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 fallida

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

Propiedad Valor
severity ERROR
status.code

El código de error canónico de la API de Google que mejor describe el error. Los siguientes son posibles códigos de error que pueden aparecer:

status.message El mensaje legible por humanos para esta entrada.

Deshabilitar el acceso a la consola serial interactiva

Puede deshabilitar el acceso a la consola serie interactiva cambiando los metadatos en la instancia o proyecto específico, o configurando una Política de organización que deshabilite el acceso a la consola serie interactiva a todas las instancias de VM para uno o más proyectos que forman parte de la organización.

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

Los propietarios y editores de proyectos, así como los usuarios a los que se les ha otorgado la función compute.instanceAdmin.v1 , pueden deshabilitar el acceso a la consola serie cambiando los metadatos en la instancia o proyecto en particular. De manera similar a habilitar el acceso a la consola serie , configure los metadatos serial-port-enable en FALSE :

serial-port-enable=FALSE

Por ejemplo, usando la CLI de Google Cloud, 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:

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

Deshabilitar el acceso a la consola serial interactiva a través de la Política de la organización

Si se le ha otorgado el rol orgpolicy.policyAdmin en la organización, puede establecer una política de organización que impida el acceso interactivo a la consola serie, independientemente de si el acceso a la consola serie interactiva está habilitado en el servidor de metadatos. Una vez establecida la política de la organización, la política anula de manera efectiva la clave de metadatos serial-port-enable y ningún usuario de la organización o proyecto puede habilitar el acceso a la consola serie interactiva. De forma predeterminada, esta restricción está establecida en FALSE .

La restricción para deshabilitar el acceso a la consola serie interactiva es la siguiente:

compute.disableSerialPortAccess

Complete las siguientes instrucciones para establecer esta política en la organización. Después de configurar una política, puede otorgar exenciones por proyecto.

nube de gcloud

Para configurar la política mediante la CLI de Google Cloud, ejecute el comando resource-manager enable-enforce . Reemplace organization-id con el ID de su organización . Por ejemplo, 1759840282 .

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

DESCANSAR

Para establecer una política en la API, realice una solicitud POST a la siguiente URL. Reemplace organization-name con el nombre de su organización . Por ejemplo, organizations/1759840282 .

 POST https://cloudresourcemanager.googleapis.com/v1/organization-name: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": TRUE
     },
     "constraint": "constraints/compute.disableSerialPortAccess"
   }
 }
 

La política entra en vigor de inmediato, por lo que cualquier proyecto de la organización dejará de permitir inmediatamente el acceso interactivo a la consola serie.

Para deshabilitar temporalmente la política, use el comando disable-enforce :

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

Alternativamente, puede realizar una solicitud API donde el cuerpo de la solicitud establece el parámetro enforced en FALSE :

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

Establecer la política de la organización a nivel de proyecto.

Puede establecer la misma política organizativa para cada proyecto. Esto anula la configuración a nivel de organización.

nube de gcloud

Desactivar la aplicación de esta política para un proyecto específico. Reemplace project-id con su ID de proyecto.

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

Puede activar la aplicación de esta política utilizando el comando enable-enforce con los mismos valores.

DESCANSAR

En la API, realice una solicitud POST a la siguiente URL para habilitar el acceso a la consola serial interactiva para el proyecto, reemplazando 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"
  }
}

Consejos y trucos

  • Si tienes problemas para conectarte usando un cliente SSH estándar, pero gcloud compute connect-to-serial-port se conecta correctamente, podría ser ú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 se habría ejecutado en tu nombre y comparar las opciones con el comando que estás usando.

  • Si está utilizando una máquina virtual Windows con el inicio de sesión en el sistema operativo habilitado y encuentra un error UNAUTHENTICATED , verifique que sus claves SSH públicas se hayan publicado en los metadatos de su proyecto o instancia. Para obtener más información, consulte Administrar claves SSH en metadatos .

  • Al configurar la velocidad de bits, también conocida como velocidad en baudios, puede establecer cualquier velocidad de bits que desee, como stty 9600 , pero la función normalmente fuerza la velocidad efectiva a 115.200 bps (~11,5 kB/seg). Esto se debe a que muchas imágenes públicas tienen por defecto velocidades de bits lentas, como 9.600 en la consola serie, y se inician lentamente.

  • Algunas imágenes del sistema operativo tienen valores predeterminados inconvenientes en el puerto serie. Por ejemplo, en CentOS 7, el valor predeterminado de stty icrnl para la tecla Enter en la consola es enviar un CR , también conocido como ^M . El shell bash puede enmascarar esto hasta que intente establecer una contraseña, momento en el cual puede preguntarse por qué parece atascado en el password:

  • Algunas imágenes públicas tienen claves de control de trabajos que están deshabilitadas de forma predeterminada si conecta un shell a un puerto de determinadas maneras. Algunos ejemplos de estas claves incluyen ^Z y ^C . El comando setsid podría solucionar este problema. De lo contrario, si ve que un job control is disabled in this shell , tenga cuidado de no ejecutar comandos que necesitará interrumpir.

  • Puede resultarle útil indicarle al sistema el tamaño de la ventana que está utilizando, para que bash y los editores puedan administrarla correctamente. De lo contrario, es posible que experimente un comportamiento de visualización extraño porque bash o los editores intentan manipular la visualización basándose en suposiciones incorrectas sobre la cantidad de filas y columnas disponibles. Utilice el comando stty rows Y cols X y el indicador stty -a para ver cuál es la configuración. Por ejemplo: stty rows 60 cols 120 (si su ventana tiene 120 caracteres por 60 líneas).

  • Si, por ejemplo, se conecta usando SSH desde la máquina A a la máquina B, y luego a la máquina C, creando una sesión SSH anidada, y desea usar comandos de tilde (~) para desconectarse o enviar una señal de interrupción en serie, necesitará agregar suficientes caracteres de tilde adicionales al comando para llegar al cliente SSH correcto. El cliente SSH en la máquina A interpreta un comando que sigue a una sola tilde; el cliente en la máquina B interpreta un comando que sigue a dos tildes consecutivas (Intro~~), y así sucesivamente. Solo necesita presionar Enter una vez porque se pasa hasta el destino SSH más interno. Esto es válido para cualquier uso de clientes SSH que proporcionen la función de escape de tilde.

    Si pierde la cuenta de cuántos caracteres de tilde necesita, presione la tecla Intro y luego escriba los caracteres de tilde uno a la vez hasta que la instancia repita la tilde. Este eco indica que ha llegado al final de la cadena y ahora sabe que para enviar un comando de tilde al cliente SSH más anidado, necesita una tilde menos que todas las tildes que haya escrito.

Opciones avanzadas

También puede utilizar las siguientes opciones avanzadas con el puerto serie.

Controlar las conexiones máximas

Puede configurar la propiedad max-connections para controlar cuántas conexiones simultáneas se pueden realizar a este puerto 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

Configurar opciones de reproducción

De forma predeterminada, cada vez que se conecte a la consola serie, recibirá una repetición de las últimas 10 líneas de datos, independientemente de si las últimas 10 líneas han sido vistas por otro cliente SSH. Puede cambiar esta configuración y controlar cuántas y qué líneas se devuelven configurando las siguientes opciones:

  • replay-lines=N : establece N en el número de líneas que deseas reproducir. Por ejemplo, si N es 50, se incluyen las últimas 50 líneas de la salida de la consola.
  • replay-bytes=N : reproduce los N bytes más recientes. También puede establecer N en new que repite todos los resultados que aún no se han enviado a ningún cliente.
  • replay-from=N : Replays Salida que comienza desde un índice de bytes absoluto que usted proporciona. Puede obtener el índice de bytes actual de la salida de la consola serie realizando una solicitud getSerialPortOutput . Si establece replay-from , todas las demás opciones de repetición se ignoran.

Con la CLI de Google Cloud, agregue lo siguiente a su comando connect-to-serial-port , donde N es el número especificado de líneas (o bytes o índice de byte absoluto, dependiendo de la opción de reproducción que esté seleccionando):

--extra-args replay-lines=N

Si está utilizando un cliente SSH de terceros, proporcione esta opción en su 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 puede usar una combinación de estas opciones. Por ejemplo:

replay-lines=N y replay-bytes=new
Reproducir el número especificado de líneas o reproducir toda la salida que no se envió previamente a ningún cliente, lo que sea mayor. El primer cliente en conectarse con esta combinación de bandera verá toda la salida que se ha enviado al puerto serie, y los clientes que se conectan de manera subsuficiente solo verán las últimas líneas N . 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
Reproducir líneas hasta, pero no más, el número de líneas o bytes descritos por estas banderas, lo que sea menos. Esta opción no reproducirá 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

Manejo de salida caída

El 1 MIB de salida más reciente para cada puerto serie siempre está disponible y, en general, su cliente SSH no debe perder ninguna salida del puerto serie. Si, por alguna razón, su cliente SSH deja de aceptar la salida por un período de tiempo pero no se desconecta, y se produce más de 1 MIB de nuevos datos, su cliente SSH podría perderse alguna salida. Cuando su cliente SSH no acepta datos lo suficientemente rápido como para mantenerse al día con la salida en el puerto de la consola serie, puede establecer la propiedad on-dropped-output para determinar cómo se comporta la consola.

Establezca cualquiera de las siguientes opciones aplicables con esta propiedad:

  • insert-stderr-note : inserte una nota en el stderr del cliente SSH que indica que se eliminó la salida. Esta es la opción predeterminada.
  • ignore : Silenciosamente deja deja la salida y no hace nada.
  • disconnect : ​​detener 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

Habilitar la desconexión usando los comandos de salida o de sesión

Puede habilitar la desconexión de los comandos de salida o cierre de sesión configurando la propiedad on-dtr-low para disconnect cuando se conecta a la consola serie.

En la CLI de Google Cloud, agregue el siguiente indicador a su comando connect-to-serial-port :

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

Si está utilizando un cliente SSH de terceros, proporcione esta opción en su 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

Habilitar la opción de disconnect puede hacer que su instancia se desconecte una o más veces cuando reinicia la instancia porque el sistema operativo restablece los puertos seriales mientras se inicia.

La configuración predeterminada para la opción on-dtr-low es none . Si usa la configuración predeterminada none , puede reiniciar su instancia sin ser desconectado de la consola serie, pero la consola no se desconectará a través de medios normales como comandos exit o logout , o combinaciones de clave normales como Ctrl+D.

¿Qué sigue?