Solução de problemas usando o console serial


Esta página descreve como habilitar o acesso interativo ao console serial de uma instância para depurar problemas de inicialização e rede, solucionar problemas de instâncias com defeito, interagir com o GRand Unified Bootloader (GRUB) e executar outras tarefas de solução de problemas.

Uma instância de máquina virtual (VM) possui quatro portas seriais virtuais. Interagir com uma porta serial é semelhante a usar uma janela de terminal, pois a entrada e a saída são inteiramente em modo texto e não há interface gráfica ou suporte para mouse. O sistema operacional da instância, o BIOS e outras entidades no nível do sistema geralmente gravam a saída nas portas seriais e podem aceitar entradas como comandos ou respostas a prompts. Normalmente, essas entidades de nível de sistema usam a primeira porta serial (porta 1) e a porta serial 1 costuma ser chamada de console serial.

Se você precisar apenas visualizar a saída da porta serial sem emitir nenhum comando para o console serial, poderá chamar o método getSerialPortOutput ou usar o Cloud Logging para ler as informações que sua instância gravou na porta serial. consulte Visualizando logs de porta serial . No entanto, se você tiver problemas para acessar sua instância por meio de SSH ou precisar solucionar problemas de uma instância que não esteja totalmente inicializada, poderá ativar o acesso interativo ao console serial, que permite conectar-se e interagir com qualquer uma das portas seriais da sua instância. Por exemplo, você pode executar comandos diretamente e responder aos prompts na porta serial.

Ao ativar ou desativar a porta serial, você pode usar qualquer valor booleano aceito pelo servidor de metadados. Para obter mais informações, consulte Valores booleanos .

Antes de começar

  • Se ainda não o fez, configure a autenticação. Autenticação é o processo pelo qual sua identidade é verificada para acesso a Google Cloud serviços e APIs. Para executar códigos ou amostras em um ambiente de desenvolvimento local, você pode se autenticar no Compute Engine selecionando uma das seguintes opções:

    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 as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.

        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 mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud.

Ativando o acesso interativo no console serial

Habilite o acesso interativo ao console serial para instâncias de VM individuais ou para um projeto inteiro.

Ativando o acesso para um projeto

Habilitar o acesso interativo ao console serial em um projeto permite o acesso a todas as instâncias de VM que fazem parte desse projeto.

Por padrão, o acesso interativo à porta serial está desabilitado. Você também pode desativá-lo explicitamente definindo a chave serial-port-enable como FALSE . Em ambos os casos, qualquer configuração por instância substitui a configuração no nível do projeto ou a configuração padrão.

Console

  1. No console do Google Cloud, acesse a página Metadados .

    Vá para Metadados

  2. Clique em Editar para editar entradas de metadados.
  3. Adicione uma nova entrada que use a chave serial-port-enable e o valor TRUE .
  4. Salve suas alterações.

gcloud

Usando a CLI do Google Cloud, insira o comando project-info add-metadata da seguinte maneira:

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

DESCANSAR

Na API, faça uma solicitação ao projects().setCommonInstanceMetadata , fornecendo à chave serial-port-enable um valor TRUE :

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

Habilitar o acesso para uma instância de VM

Habilite o acesso interativo ao console serial para uma instância específica. Uma configuração por instância, se existir, substitui qualquer configuração no nível do projeto. Você também pode desabilitar o acesso para uma instância específica, mesmo que o acesso esteja habilitado no nível do projeto, definindo serial-port-enable como FALSE , em vez de TRUE . Da mesma forma, você pode habilitar o acesso para uma ou mais instâncias mesmo que esteja desabilitado para o projeto, explicitamente ou por padrão.

Console

  1. No console do Google Cloud, acesse a página de instâncias de VM .

    Acesse a página de instâncias de VM

  2. Clique na instância para a qual deseja ativar o acesso.
  3. Clique em Editar .
  4. Na seção Acesso remoto , alterne a caixa de seleção Habilitar conexão com portas seriais .
  5. Salve suas alterações.

gcloud

Usando a Google Cloud CLI, insira o comando instances add-metadata , substituindo instance-name pelo nome da sua instância.

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

DESCANSAR

Na API, faça uma solicitação ao método instances().setMetadata com a chave serial-port-enable e um valor 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 o console serial para uma instância bare metal

Para instâncias bare metal, aumente a taxa de bits, também conhecida como taxa de transmissão, do console serial para 115.200 bps (~11,5 kB/s). Usar uma velocidade mais lenta resulta em saída do console distorcida ou ausente.

A configuração do bootloader varia entre sistemas operacionais e versões de sistema operacional. Consulte a documentação do distribuidor do sistema operacional para obter instruções.

Se estiver modificando a taxa de bits na linha de comando da sessão atual, use um comando semelhante ao seguinte:

console=ttyS0,115200

Se estiver modificando a configuração do GRUB, use um comando semelhante ao seguinte:

serial --speed=115200

Certifique-se de atualizar a configuração real do bootloader. Isso pode ser feito com update-grub , grub2-mkconfig ou um comando semelhante.

Conectando-se a um console serial

O Compute Engine oferece gateways de console serial regionais para cada Google Cloudregião. Depois de ativar o acesso interativo ao console serial de uma VM, você poderá conectar-se a um console serial regional.

O console serial autentica usuários com chaves SSH . Especificamente, você deve adicionar sua chave SSH pública aos metadados do projeto ou da instância e armazenar sua chave privada na máquina local da qual deseja se conectar. A CLI gcloud e o console do Google Cloud adicionam automaticamente chaves SSH ao projeto para você. Se estiver usando um cliente de terceiros, talvez seja necessário adicionar chaves SSH manualmente.

Se você estiver usando um cliente de terceiros, poderá validar adicionalmente a conexão usando as chaves de host do console serial . Quando você usa a CLI do Google Cloud para se conectar, a autenticação da chave do host é feita automaticamente em seu nome.

Console

Para se conectar ao console serial regional de uma VM, faça o seguinte:

  1. No console do Google Cloud, acesse a página de instâncias de VM .

    Acesse a página de instâncias de VM

  2. Clique na instância à qual você deseja se conectar.
  3. Em Acesso remoto , clique em Conectar ao console serial para conectar-se à porta padrão (porta 1).
  4. Se desejar conectar-se a outra porta serial, clique na seta para baixo ao lado do botão Conectar ao console serial e altere o número da porta de acordo.
  5. Para instâncias Windows, abra o menu suspenso próximo ao botão e conecte-se à Porta 2 para acessar o console serial.

gcloud

Para se conectar ao console serial regional de uma VM, use o comando gcloud compute connect-to-serial-port :

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

Substitua o seguinte:

  • VM_NAME : o nome da VM cujo console serial você deseja se conectar.
  • PORT_NUMBER : o número da porta que você deseja conectar. Para VMs Linux, use 1 , para VMs Windows, use 2 . Para saber mais sobre números de porta, consulte Noções básicas sobre numeração de porta serial .

Outros clientes SSH

Você pode se conectar ao console serial de uma instância usando outros clientes SSH de terceiros, desde que o cliente permita a conexão à porta TCP 9600. Antes de se conectar, você pode opcionalmente validar a conexão usando as chaves de host do console serial .

Para se conectar ao console serial regional de uma VM, execute um dos seguintes comandos, dependendo do sistema operacional da sua VM:

  • Para se conectar a uma VM Linux:

    ssh -i PRIVATE_SSH_KEY_FILE -p 9600 PROJECT_ID.ZONE.VM_NAME.USERNAME.OPTIONS@REGION-ssh-serialport.googleapis.com
    
  • Para se conectar a uma VM do Windows:

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

Substitua o seguinte:

  • PRIVATE_SSH_KEY_FILE : a chave SSH privada da instância.
  • PROJECT_ID : o ID do projeto para esta instância de VM.
  • ZONE : a zona da instância de VM.
  • REGION : a região da instância de VM.
  • VM_NAME : o nome da instância da VM.
  • USERNAME : O nome de usuário que você está usando para se conectar à sua instância. Normalmente, este é o nome de usuário da sua máquina local.
  • OPTIONS : Opções adicionais que você pode especificar para esta conexão. Por exemplo, você pode especificar uma determinada porta serial e qualquer opção avançada . O número da porta pode ser de 1 a 4, inclusive. Para saber mais sobre números de porta, consulte Noções básicas sobre numeração de porta serial . Se omitido, você se conectará à porta serial 1.

Se você estiver tendo problemas para se conectar usando um cliente SSH de terceiros, poderá executar o comando gcloud compute connect-to-serial-port com a opção de linha de comando --dry-run para ver o comando SSH que ele executaria em seu nome. Então você pode comparar as opções com o comando que está usando.

Validar conexões de cliente SSH de terceiros

Ao usar um cliente SSH de terceiros que não seja a CLI do Google Cloud, você pode garantir que está protegido contra falsificação de identidade ou ataques man-in-the-middle verificando a chave de host SSH da porta serial do Google. Para configurar seu sistema para verificar a chave do host SSH, conclua as etapas a seguir:

  1. Baixe a chave de host SSH para o console serial que você usará:

  2. Abra seu arquivo de hosts conhecidos, geralmente localizado em ~/.ssh/known_hosts .

  3. Adicione o conteúdo da chave do host SSH, com o nome do host do servidor anexado à chave. Por exemplo, se a chave do servidor us-central1 contiver a linha ssh-rsa AAAAB3NzaC1yc... , então ~/.ssh/known_hosts deverá ter uma linha como esta:

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

Por motivos de segurança, o Google pode alterar ocasionalmente a chave de host SSH da porta serial do Google. Se o seu cliente não conseguir autenticar a chave do servidor, encerre imediatamente a tentativa de conexão e conclua as etapas anteriores para fazer download de uma nova chave de host SSH da porta serial do Google.

Se, após atualizar a chave do host, você continuar recebendo um erro de autenticação do host do seu cliente, interrompa as tentativas de conexão à porta serial e entre em contato com o suporte do Google. Não forneça credenciais em uma conexão em que a autenticação do host falhou.

Desconectando do console serial

Para desconectar do console serial:

  1. Pressione a tecla ENTER .
  2. Digite ~. (til, seguido de ponto final).

Você pode descobrir outros comandos digitando ~? ou examinando a página de manual do SSH:

man ssh

Não tente desconectar usando nenhum dos seguintes métodos:

  • A combinação de teclas CTRL+ALT+DELETE ou outras combinações semelhantes. Isso não funciona porque o console serial não reconhece combinações de teclado do PC.

  • O comando exit ou logout não funciona porque o convidado não tem conhecimento de nenhuma conexão de rede ou modem. Usar esse comando faz com que o console feche e reabra novamente, e você permanece conectado à sessão. Se desejar habilitar comandos exit e logout para sua sessão, você pode habilitá-los definindo a opção on-dtr-low .

Conectando-se a um console serial com um prompt de login

Se você estiver tentando solucionar um problema com uma VM que foi inicializada completamente ou tentando solucionar um problema que ocorre após a inicialização da VM após o modo de usuário único, você poderá ser solicitado a fornecer informações de login ao tentar acessar o console serial.

Por padrão, as imagens do sistema Linux fornecidas pelo Google não são configuradas para permitir logins baseados em senha para usuários locais. No entanto, as imagens do Windows fornecidas pelo Google são configuradas para permitir logins baseados em senha para usuários locais.

Se sua VM estiver executando uma imagem pré-configurada com logins de porta serial, você precisará configurar uma senha local na VM para poder entrar no console serial, se solicitado. Você pode configurar uma senha local após conectar-se à VM ou usando um script de inicialização.

Configurando uma senha local usando um script de inicialização

Você pode usar um script de inicialização para configurar uma senha local que permite conectar-se ao console serial durante ou após a criação da VM.

Para configurar uma senha local em uma VM existente, selecione uma das seguintes opções:

Linux

  1. No console do Google Cloud, acesse a página de instâncias de VM .

    Acesse as instâncias de VM

  2. Na coluna Nome , clique no nome da VM para a qual você deseja adicionar uma senha local.

    A página de detalhes da VM é aberta.

  3. Clique em Editar .

    A página para editar os detalhes da VM é aberta.

  4. Na seção Metadados > Automação , faça o seguinte:

    1. Se a VM tiver um script de inicialização existente, remova-o e armazene o script em algum lugar seguro.

    2. Adicione o seguinte script de inicialização:

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

      Substitua o seguinte:

      • USERNAME : o nome de usuário que você deseja adicionar.

      • PASSWORD : a senha do nome de usuário. Como alguns sistemas operacionais exigem comprimento e complexidade mínimos de senha, especifique uma senha da seguinte maneira:

        • Use pelo menos 12 caracteres.

        • Use uma combinação de letras maiúsculas e minúsculas, números e símbolos.

  5. Clique em Salvar .

    A página de detalhes da VM é aberta.

  6. Clique em Redefinir .

  7. Conecte-se ao console serial .

  8. Quando solicitado, insira suas informações de login.

Windows

  1. No console do Google Cloud, acesse a página de instâncias de VM .

    Acesse as instâncias de VM

  2. Na coluna Nome , clique no nome da VM para a qual você deseja adicionar uma senha local.

    A página de detalhes da VM é aberta.

  3. Clique em Editar .

    A página para editar os detalhes da VM é aberta.

  4. Na seção Metadados , faça o seguinte:

    1. Se a VM tiver um script de inicialização existente, armazene o script em algum lugar seguro e, para excluí-lo, clique em Excluir item .

    2. Clique em Adicionar item .

    3. No campo Chave , insira windows-startup-script-cmd .

    4. No campo Valor , insira o seguinte script:

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

      Substitua o seguinte:

      • USERNAME : o nome de usuário que você deseja adicionar.

      • PASSWORD : a senha do nome de usuário. Como alguns sistemas operacionais exigem comprimento e complexidade mínimos de senha, especifique uma senha da seguinte maneira:

        • Use pelo menos 12 caracteres.

        • Use uma combinação de letras maiúsculas e minúsculas, números e símbolos.

  5. Clique em Salvar .

    A página de detalhes da VM é aberta.

  6. Clique em Redefinir .

  7. Conecte-se ao console serial .

  8. Quando solicitado, insira suas informações de login.

Após a criação do usuário, substitua o script de inicialização pelo script de inicialização armazenado nesta seção.

Configurando uma senha local usando passwd na VM

As instruções a seguir descrevem como configurar uma senha local para um usuário em uma VM para que o usuário possa fazer logon no console serial dessa VM usando a senha especificada.

  1. Conecte-se à VM. Substitua instance-name pelo nome da sua instância.

    gcloud compute ssh instance-name
  2. Na VM, crie uma senha local com o comando a seguir. Isso define uma senha para o usuário com o qual você está conectado no momento.

    sudo passwd $(whoami)
  3. Siga as instruções para criar uma senha.

  4. Em seguida, efetue logout da instância e conecte-se ao console serial .

  5. Digite suas informações de login quando solicitado.

Configurando um login em outras portas seriais

Os prompts de login são habilitados na porta 1 por padrão na maioria dos sistemas operacionais Linux. No entanto, a porta 1 muitas vezes pode ficar sobrecarregada com o registro de dados e outras informações impressas na porta. Em vez disso, você pode optar por ativar um prompt de login em outra porta, como a porta 2 (ttyS1), executando um dos seguintes comandos em sua VM. Você pode ver uma lista de portas disponíveis para uma VM em Noções básicas sobre numeração de porta serial .

A tabela a seguir lista imagens pré-configuradas com login de console serial e as portas padrão.

Sistema operacional Portas com prompt de login por padrão Gerenciamento de serviços
CentOS 6 1 upstart
CentOS 7 1 systemd
Core OS 1 systemd
COS 1 systemd
Debian 8 1 systemd
Debian 9 1 systemd
OpenSUSE 13 1 systemd
Salto do OpenSUSE 1 systemd
RHEL 6 1 upstart
RHEL 7 1 systemd
LES 11 1 sysvinit
LES 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 N / D

Para ativar prompts de login em portas seriais adicionais, siga as instruções a seguir.

sistema

Para sistemas operacionais Linux usando systemd :

  • Habilite o serviço temporariamente até a próxima reinicialização:

    sudo systemctl start serial-getty@ttyS1.service
  • Habilite o serviço permanentemente, começando na próxima reinicialização:

    sudo systemctl enable serial-getty@ttyS1.service

novato

Para sistemas operacionais Linux usando upstart :

  1. Crie um novo arquivo /etc/init/ttyS1.conf para refletir ttyS1 copiando e modificando um arquivo ttyS0.conf existente. Por exemplo:

    • No Ubuntu 14.04:

      sudo sh -c "sed -e s/ttyS0/ttyS1/g < /etc/init/ttyS0.conf > /etc/init/ttyS1.conf"
    • No RHEL 6.8 e 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. Inicie em um prompt de login no ttyS1 sem reiniciar:

    sudo start ttyS1

sysvinit

Para sistemas operacionais Linux que usam sysvinit , execute o seguinte comando:

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

Compreendendo a numeração da porta serial

Cada instância de máquina virtual possui quatro portas seriais. Para consistência com a API getSerialPortOutput , cada porta é numerada de 1 a 4. O Linux e outros sistemas semelhantes numeram suas portas seriais de 0 a 3. Por exemplo, em muitas imagens de sistema operacional, os dispositivos correspondentes são de /dev/ttyS0 a /dev/ttyS3 . O Windows refere-se às portas seriais como COM1 a COM4 . Para se conectar ao que o Windows considera COM3 e o Linux considera ttyS2 , você deve especificar a porta 3. Use a tabela a seguir para ajudá-lo a descobrir a qual porta você deseja se conectar.

Portas seriais de instância de máquina virtual Portas seriais padrão do Linux Portas COM do Windows
1 /dev/ttyS0 COM1
2 /dev/ttyS1 COM2
3 /dev/ttyS2 COM3
4 /dev/ttyS3 COM4

Observe que muitas imagens do Linux usam a porta 1 ( /dev/ttyS0 ) para registrar mensagens do kernel e dos programas do sistema.

Enviando uma quebra de série

O recurso principal Magic SysRq permite executar tarefas de baixo nível, independentemente do estado do sistema. Por exemplo, você pode sincronizar sistemas de arquivos, reinicializar a instância, encerrar processos e desmontar sistemas de arquivos usando o recurso Magic SysRq key.

Para enviar um comando Magic SysRq usando uma quebra de série simulada:

  1. Pressione a tecla ENTER .
  2. Digite ~B (til, seguido de B maiúsculo).
  3. Digite o comando Magic SysRq.

Visualizando logs de auditoria do console serial

O Compute Engine fornece registros de auditoria para rastrear quem se conectou e desconectou do console serial de uma instância. Para visualizar logs, você deve ter permissões para o Visualizador de Logs ou ser um visualizador ou editor do projeto.

  1. No console do Google Cloud, acesse a página do Logs Explorer .

    Acesse o Explorador de registros

  2. Expanda o menu suspenso e selecione GCE VM Instance .
  3. Na barra de pesquisa, digite ssh-serialport.googleapis.com e pressione Enter .
  4. Uma lista de logs de auditoria é exibida. Os logs descrevem conexões e desconexões de um console serial. Expanda qualquer uma das entradas para obter mais informações.

Para qualquer um dos registros de auditoria, você pode:

  1. Expanda a propriedade protoPayload .
  2. Procure por methodName para ver a atividade à qual este log se aplica (uma solicitação de conexão ou desconexão). Por exemplo, se este log rastrear uma desconexão do console serial, o nome do método seria "google.ssh-serialport.v1.disconnect" . Da mesma forma, um log de conexão diria "google.ssh-serialport.v1.connect" . Uma entrada de log de auditoria é registrada no início e no final de cada sessão no console serial.

Existem diferentes propriedades de log de auditoria para diferentes tipos de log. Por exemplo, os logs de auditoria relacionados a conexões possuem propriedades específicas dos logs de conexão, enquanto os logs de auditoria para desconexões possuem seu próprio conjunto de propriedades. Existem determinadas propriedades de log de auditoria que também são compartilhadas entre os dois tipos de log.

Todos os logs do console serial

A tabela a seguir fornece propriedades de log de auditoria e seus valores para todos os logs do console serial:

Propriedade Valor
requestMetadata.callerIp O endereço IP e o número da porta de origem da conexão.
serviceName ssh-serialport.googleapis.com
resourceName Uma string contendo o ID do projeto, a zona, o nome da instância e o número da porta serial para indicar a qual console serial isso pertence. Por exemplo, projects/ myproject /zones/us-east1-a/instances/ example-instance /SerialPort/2 é a porta número 2, também conhecida como COM2 ou /dev/ttyS1, para a instância example-instance .
resource.labels Propriedades que identificam o ID da instância, a zona e o ID do projeto.
timestamp Um carimbo de data/hora que indica quando a sessão começou ou terminou.
severity NOTICE
operation.id Uma string de ID que identifica exclusivamente a sessão; você pode usar isso para associar uma entrada de desconexão à entrada de conexão correspondente.
operation.producer ssh-serialport.googleapis.com

Registros de conexão

A tabela a seguir fornece propriedades de log de auditoria e seus valores específicos para logs de conexão:

Propriedade Valor
methodName google.ssh-serialport.v1.connect
status.message Connection succeeded.
request.serialConsoleOptions Quaisquer opções especificadas com a solicitação, incluindo o número da porta serial.
request.@type type.googleapis.com/google.compute.SerialConsoleSessionBegin
request.username O nome de usuário especificado para esta solicitação. Isso é usado para selecionar a chave pública a ser correspondida.
operation.first TRUE
status.code Para solicitações de conexão bem-sucedidas, um valor status.code de google.rpc.Code.OK indica que a operação foi concluída com êxito e sem erros. Como o valor enum dessa propriedade é 0 , a propriedade status.code não é exibida. No entanto, qualquer código que verifique um valor status.code de google.rpc.Code.OK funcionará conforme o esperado.

Registros de desconexão

A tabela a seguir fornece propriedades de log de auditoria e seus valores específicos para logs de desconexão:

Propriedade Valor
methodName google.ssh-serialport.v1.disconnect
response.duration A quantidade de tempo, em segundos, que a sessão durou.
response.@type type.googleapis.com/google.compute.SerialConsoleSessionEnd
operation.last TRUE

Registros de conexão com falha

Quando uma conexão falha, o Compute Engine cria uma entrada de registro de auditoria. Um log de conexão com falha é muito semelhante a uma entrada de conexão bem-sucedida, mas possui as propriedades a seguir para indicar uma conexão com falha.

Propriedade Valor
severity ERROR
status.code

O código de erro canônico da API do Google que melhor descreve o erro. A seguir estão os possíveis códigos de erro que podem aparecer:

status.message A mensagem legível para esta entrada.

Desativando o acesso ao console serial interativo

Você pode desabilitar o acesso ao console serial interativo alterando os metadados na instância ou projeto específico ou definindo uma Política da Organização que desabilite o acesso ao console serial interativo para todas as instâncias de VM para um ou mais projetos que fazem parte da organização.

Desativando o console serial interativo em uma instância ou projeto específico

Proprietários e editores de projetos, bem como usuários aos quais foi concedida a função compute.instanceAdmin.v1 , podem desabilitar o acesso ao console serial alterando os metadados na instância ou projeto específico. Semelhante à ativação do acesso ao console serial , defina os metadados serial-port-enable como FALSE :

serial-port-enable=FALSE

Por exemplo, usando a CLI do Google Cloud, você pode aplicar esses metadados a uma instância específica da seguinte forma:

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

Para aplicar os metadados ao projeto:

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

Desativando o acesso ao console serial interativo por meio da Política da Organização

Se você tiver recebido a função orgpolicy.policyAdmin na organização, poderá definir uma política da organização que impeça o acesso interativo ao console serial, independentemente de o acesso ao console serial interativo estar ativado no servidor de metadados. Depois que a política da organização for definida, a política substituirá efetivamente a chave de metadados serial-port-enable e nenhum usuário da organização ou do projeto poderá habilitar o acesso interativo ao console serial. Por padrão, esta restrição é definida como FALSE .

A restrição para desabilitar o acesso ao console serial interativo é a seguinte:

compute.disableSerialPortAccess

Conclua as instruções a seguir para definir esta política na organização. Depois de configurar uma política, você pode conceder isenções por projeto.

gcloud

Para definir a política usando a Google Cloud CLI, execute o comando resource-manager enable-enforce . Substitua organization-id pelo ID da sua organização . Por exemplo, 1759840282 .

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

DESCANSAR

Para definir uma política na API, faça uma solicitação POST para o URL a seguir. Substitua organization-name pelo nome da sua organização . Por exemplo, organizations/1759840282 .

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

O corpo da solicitação deve conter um objeto policy com a seguinte restrição:

"constraint": "constraints/compute.disableSerialPortAccess"

Por exemplo:

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

A política entra em vigor imediatamente, portanto, quaisquer projetos da organização param imediatamente de permitir o acesso interativo ao console serial.

Para desabilitar temporariamente a política, use o comando disable-enforce :

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

Alternativamente, você pode fazer uma solicitação de API onde o corpo da solicitação define o parâmetro enforced como FALSE :

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

Definir a política da organização no nível do projeto

Você pode definir a mesma política organizacional por projeto. Isso substitui a configuração no nível da organização.

gcloud

Para desativar a aplicação desta política para um projeto específico. Substitua project-id pelo ID do seu projeto.

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

Você pode ativar a aplicação desta política usando o comando enable-enforce com os mesmos valores.

DESCANSAR

Na API, faça uma solicitação POST para o seguinte URL para ativar o acesso interativo ao console serial para o projeto, substituindo project-id pelo ID do projeto:

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

O corpo da solicitação deve conter um objeto policy com a seguinte restrição:

"constraint": "constraints/compute.disableSerialPortAccess"

Por exemplo:

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

Dicas e truques

  • Se você estiver tendo problemas para se conectar usando um cliente SSH padrão, mas gcloud compute connect-to-serial-port se conectar com sucesso, pode ser útil executar gcloud compute connect-to-serial-port com a opção de linha de comando --dry-run para ver o comando SSH que ele teria executado em seu nome e comparar as opções com o comando que você está usando.

  • Se você estiver usando uma VM do Windows com login do sistema operacional habilitado e encontrar um erro UNAUTHENTICATED , verifique se suas chaves SSH públicas foram postadas nos metadados do seu projeto ou instância. Para saber mais, consulte Gerenciando chaves SSH em metadados .

  • Definindo a taxa de bits, também conhecida como taxa de transmissão, você pode definir qualquer taxa de bits que desejar, como stty 9600 , mas o recurso normalmente força a taxa efetiva para 115.200 bps (~11,5kB/seg). Isso ocorre porque muitas imagens públicas têm como padrão taxas de bits lentas, como 9.600 no console serial, e inicializariam lentamente.

  • Algumas imagens do sistema operacional possuem padrões inconvenientes na porta serial. Por exemplo, no CentOS 7, o padrão stty icrnl para a tecla Enter no console é enviar um CR , também conhecido como ^M . O shell bash pode mascarar isso até que você tente definir uma senha, momento em que você pode se perguntar por que ele parece travado no prompt password:

  • Algumas imagens públicas possuem chaves de controle de trabalho que são desativadas por padrão se você anexar um shell a uma porta de determinadas maneiras. Alguns exemplos dessas chaves incluem ^Z e ^C . O comando setsid pode corrigir isso. Caso contrário, se você vir um job control is disabled in this shell , tome cuidado para não executar comandos que você precisará interromper.

  • Você pode achar útil informar ao sistema o tamanho da janela que você está usando, para que o bash e os editores possam gerenciá-la adequadamente. Caso contrário, você poderá experimentar um comportamento de exibição estranho porque o bash ou os editores tentam manipular a exibição com base em suposições incorretas sobre o número de linhas e colunas disponíveis. Use o comando stty rows Y cols X e o sinalizador stty -a para ver qual é a configuração. Por exemplo: stty rows 60 cols 120 (se sua janela tiver 120 caracteres por 60 linhas).

  • Se, por exemplo, você se conectar usando SSH da máquina A para a máquina B e, em seguida, para a máquina C, criando uma sessão SSH aninhada, e quiser usar comandos til (~) para desconectar ou enviar um sinal de interrupção serial, você precisará adicionar caracteres til extras suficientes ao comando para chegar ao cliente SSH correto. Um comando após um único til é interpretado pelo cliente SSH na máquina A; um comando após dois tils consecutivos (Enter~~) é interpretado pelo cliente na máquina B e assim por diante. Você só precisa pressionar Enter uma vez porque isso é transmitido até o destino SSH mais interno. Isso é válido para qualquer uso de clientes SSH que forneçam o recurso de escape de til.

    Se você perder o controle de quantos caracteres de til são necessários, pressione a tecla Enter e digite os caracteres de til, um de cada vez, até que a instância ecoe o til de volta. Este eco indica que você atingiu o fim da cadeia e agora sabe que para enviar um comando til para o cliente SSH mais aninhado, você precisa de um til a menos do que quantos tils você digitou.

Opções avançadas

Você também pode usar as seguintes opções avançadas com a porta serial.

Controlando o máximo de conexões

Você pode definir a propriedade max-connections para controlar quantas conexões simultâneas podem ser feitas com esta porta serial por vez. O número padrão e máximo de conexões é 5. Por exemplo:

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

Configurando opções de repetição

Por padrão, cada vez que você se conectar ao console serial, você receberá uma reprodução das últimas 10 linhas de dados, independentemente de as últimas 10 linhas terem sido vistas por outro cliente SSH. Você pode alterar essa configuração e controlar quantas e quais linhas serão retornadas definindo as seguintes opções:

  • replay-lines=N : Defina N como o número de linhas que você deseja reproduzir. Por exemplo, se N for 50, as últimas 50 linhas da saída do console serão incluídas.
  • replay-bytes=N : reproduz os N bytes mais recentes. Você também pode definir N como new , que reproduz todas as saídas que ainda não foram enviadas a nenhum cliente.
  • replay-from=N : reproduz a saída a partir de um índice de bytes absoluto que você fornece. Você pode obter o índice de bytes atual da saída do console serial fazendo uma solicitação getSerialPortOutput . Se você definir replay-from , todas as outras opções de reprodução serão ignoradas.

Com a CLI do Google Cloud, anexe o seguinte ao comando connect-to-serial-port , onde N é o número especificado de linhas (ou bytes ou índice absoluto de bytes, dependendo da opção de reprodução que você está selecionando):

--extra-args replay-lines=N

Se você estiver usando um cliente SSH de terceiros, forneça esta opção em seu 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

Você também pode usar uma combinação dessas opções. Por exemplo:

replay-lines=N e replay-bytes=new
Reproduza o número especificado de linhas OU reproduza todas as saídas não enviadas anteriormente a nenhum cliente, o que for maior. O primeiro cliente a se conectar com esta combinação de sinalizador verá toda a saída que foi enviada para a porta serial, e os clientes que se conectam subsquiando só verão as últimas N linhas. Exemplos:
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 e replay-bytes=M
Replay linhas até, mas não mais do que o número de linhas ou bytes descritos por esses sinalizadores, o que for menor. Esta opção não reproduz mais do que N ou 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

Manuseio de saída caiu

A mais recente 1 MIB de saída para cada porta serial está sempre disponível e, geralmente, seu cliente SSH não deve perder nenhuma saída da porta serial. Se, por algum motivo, seu cliente SSH parar de aceitar a saída por um período de tempo, mas não desconectar e mais de 1 MIB de novos dados é produzido, seu cliente SSH poderá perder alguma saída. Quando o seu cliente SSH não está aceitando dados com rapidez suficiente para acompanhar a saída na porta de console serial, você pode definir a propriedade on-dropped-output para determinar como o console se comporta.

Defina qualquer uma das seguintes opções aplicáveis ​​com esta propriedade:

  • insert-stderr-note : Insira uma nota no stderr do cliente SSH, indicando que a saída foi descartada. Esta é a opção padrão.
  • ignore : Silenciosamente solta a saída e não faz nada.
  • disconnect : pare a conexão.

Por exemplo:

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

Permitindo desconectar usando comandos de saída ou logout

Você pode ativar a desconexão nos comandos de saída ou logout, configurando a propriedade on-dtr-low para disconnect quando você se conectar ao console serial.

Na cli do Google Cloud, anexe o seguinte sinalizador ao seu comando connect-to-serial-port :

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

Se você estiver usando um cliente SSH de terceiros, forneça esta opção no seu 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 a opção disconnect pode fazer com que sua instância desconecte uma ou mais vezes quando você está reiniciando a instância porque o sistema operacional redefine as portas seriais enquanto inicializa.

A configuração padrão para a opção on-dtr-low não é none . Se você usar a configuração padrão none , poderá reiniciar sua instância sem estar desconectado do console serial, mas o console não desconectará por meio de meios normais, como comandos exit ou logout , ou combinações de chave normais como Ctrl+D.

O que vem a seguir