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.
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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- En la consola de Google Cloud, ve a la página Metadatos.
- Haz clic en Editar para editar entradas de metadatos.
- Agrega una entrada nueva que use la clave serial-port-enable y el valor TRUE.
- Guarda los cambios.
- En la consola de Google Cloud, ve a la página Instancias de VM.
- Haz clic en la instancia para la que deseas habilitar el acceso.
- Haz clic en Editar.
- En la sección Acceso remoto, activa o desactiva la casilla de verificación Habilitar la conexión a los puertos en serie.
- Guarda los cambios.
- En la consola de Google Cloud, ve a la página Instancias de VM.
- Haz clic en la instancia a la que deseas conectarte.
- En Acceso remoto, haz clic en Conectar a la consola en serie para conectarte al puerto predeterminado (puerto 1).
- 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.
- 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.
Recomendado: Para conectarte a la consola en serie regional de una VM, usa el comando
gcloud compute connect-to-serial-port
e incluye la marca--location
:gcloud compute connect-to-serial-port VM_NAME \ --location=REGION \ --port=PORT_NUMBER
Para conectarte a la consola en serie global de una VM, usa el comando
gcloud compute connect-to-serial-port
y omite la marca--location
:gcloud compute connect-to-serial-port VM_NAME \ --port=PORT_NUMBER
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, usa1
. En las VMs de Windows, usa2
. 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.project-id
: el ID del proyecto para esta instanciazone
: la zona de la instanciainstance-name
: el nombre de la instanciausername
: 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)- Descarga la Llave SSH del servidor del puerto en serie de Google.
- Abre tu archivo de hosts conocidos; por lo general, se ubica en
~/.ssh/known_hosts
. 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íneassh-rsa AAAAB3NzaC1yc...
, entonces~/.ssh/known_hosts
debería tener una línea como la siguiente:ssh-serialport.googleapis.com ssh-rsa AAAAB3NzaC1yc...
- Presiona la tecla
ENTER
. - Escribe
~.
(virgulilla, seguido de un punto). 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
ologout
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 comandosexit
ylogout
para la sesión, configura la opciónon-dtr-low
.En la consola de Google Cloud, ve a la página Instancias de VM.
Selecciona la VM para la que deseas agregar la contraseña local.
Haga clic en Editar.
Linux
Ve a la sección Metadatos > Automatización.
Si la VM tiene una secuencia de comandos de inicio existente, cópiala y pégala en un lugar seguro.
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
- Navega a la sección Metadatos personalizados.
- Si la VM tiene una secuencia de comandos de inicio existente, cópiala y pégala en un lugar seguro.
- Haz clic en Agregar elemento.
- En el campo Clave, escribe
windows-startup-script-cmd
. 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
Haz clic en Guardar.
Para reiniciar la VM, haz clic en Restablecer. Para obtener más información, consulta Restablece una VM.
Ingresa tu información de acceso cuando se te solicite.
Quita la secuencia de comandos de inicio de la VM después de crear el usuario.
Conéctate a la VM. Reemplaza
instance-name
por el nombre de tu instancia.gcloud compute ssh instance-name
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)
Sigue las indicaciones para crear una contraseña.
A continuación, debes salir de la instancia y conectarte a la consola en serie.
Ingresa tu información de acceso cuando se te solicite.
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
Para crear un archivo
/etc/init/ttyS1.conf
nuevo y reflejarttyS1
, copia y modifica un archivottyS0.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"
Inicia una ventana de acceso en
ttyS1
sin reiniciar:sudo start ttyS1
- Presiona la tecla
ENTER
. - Escribe
~B
(virgulilla, seguido deB
mayúscula). - Escribe el comando Magic SysRq.
- En la consola de Google Cloud, ve a la página Explorador de registros.
- Expande el menú desplegable y elige GCE VM Instance.
- En la barra de búsqueda, escribe
ssh-serialport.googleapis.com
y presiona Intro. 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:
- Expandir la propiedad
protoPayload
- 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. google.rpc.Code.INVALID_ARGUMENT
: la conexión falló porque el cliente proporcionó un número de puerto no válido o intentó acceder a un canal desconocido. Consulta la lista de números de puerto válidos.google.rpc.Code.PERMISSION_DENIED
: no habilitaste la consola en serie interactiva en el servidor de metadatos. Para obtener más información, consulta cómo habilitar el acceso interactivo en la consola en serie.google.rpcCode.UNAUTHENTICATED
: no se encontraron Llaves SSH o no se encontró ninguna Llave SSH para esta instancia. Comprueba que estés autenticado en la instancia de VM.google.rpc.Code.UNKNOWN
: se produjo un error desconocido con tu solicitud. Puedes comunicarte con Google en el grupo de discusión gce o presentar un informe de errores.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 ejecutargcloud 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 unCR
, 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 solicitudpassword:
.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
y^C
. El comandosetsid
podría corregir esto. De lo contrario, si ves un mensajejob 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 marcastty -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.
replay-lines=N
: EstableceN
en el número de líneas que deseas repetir. Por ejemplo, siN
es 50, entonces, se incluyen las últimas 50 líneas del resultado de la consola.replay-bytes=N
: repite losN
bytes más recientes. También puedes establecerN
ennew
, 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 solicitudgetSerialPortOutput
. Si establecesreplay-from
, se ignoran todas las demás opciones de repetición.replay-lines=N
yreplay-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: replay-lines=N
yreplay-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
oM
bytes. insert-stderr-note
: Inserta una nota en elstderr
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.- Obtén más información sobre la API de
getSerialPortOutput
. - Aprende a conservar y ver el resultado del puerto en serie incluso después de borrar una instancia de VM.
- Lee más sugerencias para solucionar problemas.
- Obtén más información sobre cómo aplicar metadatos.
- Obtén información sobre las Llaves SSH.
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.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Si deseas obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud.
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
enFALSE
. En cualquier caso, la configuración por instancia anula la configuración a nivel de proyecto o la predeterminada.Console
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 claveserial-port-enable
con un valor deTRUE
, 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
enFALSE
, en lugar deTRUE
, 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
gcloud
Con Google Cloud CLI, escribe el comando
instances add-metadata
y reemplazainstance-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 claveserial-port-enable
y un valor deTRUE
, 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:
gcloud
Para conectarte a la consola en serie regional o global de una VM, usa uno de los siguientes comandos:
Reemplaza lo siguiente:
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 usuariojane
en un proyecto con el IDmyproject
. La instancia está en la zonaus-central1-f
. Reemplazaprivate-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:
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:
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:
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:
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.
Configura una contraseña local mediante
passwd
en la VMEn 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.
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:upstart
Para los sistemas operativos Linux que usan
upstart
, haz lo siguiente:sysvinit
Para los sistemas operativos Linux que usan
sysvinit
, ejecuta el siguiente comando:sudo sed -i~ -e 's/^#T([01])/T\1/' /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 comoCOM1
aCOM4
. Para conectarte a lo que Windows consideraCOM3
y Linux considerattyS2
, 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:
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.
En cualquiera de los registros de auditoría, puedes hacer lo siguiente:
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 instanciaexample-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
degoogle.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 es0
, la propiedadstatus.code
no se muestra. Sin embargo, cualquier código que comprueba un valorstatus.code
degoogle.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 deserial-port-enable
enFALSE
: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 deserial-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 comoFALSE
.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
. Reemplazaorganization-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. Reemplazaorganization-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
enFALSE
:{ "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, reemplazaproject-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
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:
Con Google Cloud CLI, agrega lo siguiente al comando
connect-to-serial-port
, en el queN
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:
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
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:
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
paradisconnect
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
esnone
. Si usas la configuración predeterminadanone
, puedes reiniciar la instancia sin desconectarte de la consola en serie, pero la consola no se desconectará por medios normales, como los comandosexit
ologout
, o las combinaciones de teclas normales como Ctrl + D.¿Qué sigue?
Salvo que se indique lo contrario, el contenido de esta página está sujeto a la licencia Atribución 4.0 de Creative Commons, y los ejemplos de código están sujetos a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2024-11-20 (UTC)
-