Nesta página, você verá como ativar o acesso interativo ao console serial de uma instância para depurar problemas de inicialização e rede, resolver problemas em instâncias com mau funcionamento, interagir com o GRand Unified Bootloader (GRUB) e realizar outras tarefas de solução de problemas.
Uma instância de máquina virtual (VM) tem quatro portas seriais virtuais. A interação com uma porta serial é similar ao uso de uma janela de terminal, no sentido de que a entrada e a saída ocorrem inteiramente no modo de texto e não há suporte para interface gráfica ou mouse. O sistema operacional da instância, o BIOS, e outras entidades em nível de sistema, frequentemente gravam a saída nas portas seriais e podem aceitar como entradas comandos ou respostas a prompts. Normalmente, essas entidades no nível do sistema usam a primeira porta serial (porta 1), que costuma ser chamada de console serial.
Se você precisa apenas ver a saída da porta serial sem emitir comandos ao console, chame o método getSerialPortOutput
ou use o Cloud Logging para ler informações gravadas por sua instância na porta serial. Consulte as informações sobre como visualizar registros de portas seriais.
Contudo, se você tiver problemas para acessar a instância por meio do SSH ou precisar solucionar problemas em uma instância que não está totalmente inicializada, será possível ativar o acesso interativo ao console serial, o que permite a conexão e a interação com qualquer uma das portas seriais da instância. Por exemplo, é possível executar comandos e responder a prompts diretamente na porta serial.
Ao ativar ou desativar a porta serial, é possível usar qualquer valor booleano que seja aceito pelo servidor de metadados. Para mais informações, consulte Valores booleanos.
Antes de começar
-
Configure a autenticação, caso ainda não tenha feito isso.
A autenticação é
o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud .
Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no
Compute Engine selecionando uma das seguintes opções:
Select the tab for how you plan to use the samples on this page:
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
REST
Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud.
-
Permissões exigidas para a tarefa
Para executar esta tarefa, é necessário ter as permissões a seguir:
compute.instances.setMetadata
na VM, se ativar o acesso interativo em uma VM específicacompute.projects.setCommonInstanceMetadata
no projeto, se ativar o acesso interativo para todas as VMs no projeto-
Papel
iam.serviceAccountUser
na conta de serviço da instância
Ativação do acesso interativo no console serial
Ative o acesso ao console serial interativo para instâncias de VM individuais ou para um projeto inteiro.
Como ativar acesso de um projeto
A ativação do acesso ao console serial interativo em um projeto permite acesso a todas as instâncias de VM que fazem parte desse projeto.
Por padrão, o acesso à porta serial interativa está desativado. Também é possível desativá-lo explicitamente definindo a tecla serial-port-enable
como FALSE
. Em ambos os casos, qualquer configuração por instância modifica a configuração para envolvidos no projeto ou a configuração padrão.
- No Console do Google Cloud, acesse a página Metadados.
- Clique em Editar para editar entradas de metadados.
- Adicione uma nova entrada que use a chave serial-port-enable e o valor TRUE.
- Salve as alterações.
Usando a Google Cloud CLI, digite o comando
project-info add-metadata
da seguinte maneira:
gcloud compute project-info add-metadata \ --metadata serial-port-enable=TRUE
Na API, faça uma solicitação para o método projects().setCommonInstanceMetadata
, fornecendo à chave serial-port-enable
um valor de TRUE
:
{ "fingerprint": "FikclA7UBC0=", "items": [ { "key": "serial-port-enable", "value": "TRUE" } ] }
Como ativar o acesso para uma instância de VM
Ative o acesso ao console serial interativo para uma instância específica. Uma configuração por instância modificará qualquer configuração para envolvidos no projeto. Também é possível desativar o acesso para uma instância específica, mesmo se ele estiver ativado para envolvidos no projeto. Para isso, defina serial-port-enable
como FALSE
em vez de TRUE
. Da mesma maneira, é possível ativar o acesso para uma ou mais instâncias, mesmo se ele estiver desativado para o projeto, explicitamente ou por padrão.
- No console do Google Cloud, acesse a página Instâncias de VMs.
- Clique na instância para que você quer ativar acesso.
- Clique em Editar.
- Na seção Acesso remoto, marque a caixa de seleção Ativar conexão com portas seriais.
- Salve as alterações.
Usando a Google Cloud CLI, digite o comando
instances add-metadata
,
substituindo instance-name
pelo nome da
instância.
gcloud compute instances add-metadatainstance-name \ --metadata serial-port-enable=TRUE
Na API, faça uma solicitação para o método instances().setMetadata
com a chave serial-port-enable
e um 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 o console serial para uma instância bare metal
No caso das instâncias bare metal, aumente a taxa de bits, também conhecida como taxa de Baud, do console serial para 115.200 bps (cerca de 11,5 kB/s). Usar uma velocidade mais lenta resulta em saídas do console distorcidas ou ausentes.
A configuração do carregador de inicialização varia entre os sistemas operacionais e as versões de SO. Consulte a documentação do distribuidor do SO para mais instruções.
Para modificar a taxa de bits na linha de comando para a sessão atual, use um comando semelhante ao seguinte:
console=ttyS0,115200
Para modificar a configuração do GRUB, use um comando semelhante ao seguinte:
serial --speed=115200
Atualize a configuração real do carregador de inicialização. Isso pode ser feito
com update-grub
, grub2-mkconfig
ou um comando semelhante.
Conexão com um console serial
O Compute Engine oferece gateways regionais de console serial para cada Google Cloud região. Depois de ativar o acesso interativo para o console serial de uma VM, é possível se conectar a um console serial regional.
O console serial autentica usuários com chaves SSH. Especificamente, é necessário 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 quer 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 as chaves SSH manualmente.
Para se conectar ao console serial regional de uma VM, faça o seguinte:
- No console do Google Cloud, acesse a página Instâncias de VMs.
- Clique na instância à qual você quer se conectar.
- Em Acesso remoto, clique em Conectar ao console serial para se conectar à porta padrão (porta 1).
- Se você quiser se conectar 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.
- Para instâncias do Windows, abra o menu suspenso ao lado do botão e conecte-se à Porta 2 para acessar o console serial.
Para se conectar ao console serial regional de uma VM, use o
comando gcloud compute connect-to-serial-port
:
gcloud compute connect-to-serial-portVM_NAME
--port=PORT_NUMBER
Substitua:
VM_NAME
: o nome da VM com o console serial ao qual você quer se conectar.PORT_NUMBER
: o número da porta que você quer conectar. Para VMs do Linux, use1
. Para VMs do Windows, use2
. Para saber mais sobre números de portas, consulte Noções básicas sobre a numeração de portas seriais.
É possível se conectar ao console serial de uma instância usando outros clientes SSH de terceiros, contanto que o cliente permita que você se conecte à porta TCP 9600.
Para se conectar ao console serial regional de uma VM, execute um dos seguintes comandos, dependendo do SO da VM:
Para se conectar a uma VM do Linux:
ssh -i
PRIVATE_SSH_KEY_FILE -p 9600PROJECT_ID .ZONE .VM_NAME .USERNAME .OPTIONS @REGION -ssh-serialport.googleapis.comPara se conectar a uma VM do Windows:
ssh -i
PRIVATE_SSH_KEY_FILE -p 9600PROJECT_ID .ZONE .VM_NAME .USERNAME .OPTIONS .port=2@REGION -ssh-serialport.googleapis.com
Substitua:
PRIVATE_SSH_KEY_FILE
: a chave SSH privada da instância.PROJECT_ID
: o ID do projeto da 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 de VM.USERNAME
: o nome de usuário que você está usando para se conectar à instância. Normalmente, é o nome de usuário na sua máquina local.OPTIONS
: opções extras que você especifica para essa conexão. Por exemplo, é possível especificar uma determinada porta serial e especificar qualquer opção avançada. O número da porta pode variar de 1 a 4. Para saber mais sobre números de portas, consulte Noções básicas sobre a numeração de portas seriais. Se o número for omitido, a conexão será estabelecida com a porta serial 1.
Se você estiver com problemas para se conectar usando um cliente SSH de terceiros, execute o comando gcloud compute connect-to-serial-port
com a opção de linha de comando --dry-run
para ver o comando SSH que seria executado em seu nome. Em seguida, compare as opções com o comando que está usando.
Como configurar uma conexão segura
Ao usar um cliente SSH de terceiros que não seja a Google Cloud CLI, é possível garantir a proteção contra falsificação de identidade ou ataques intermediários usando a verificação da chave SSH do servidor de portas seriais do Google. Para configurar seu sistema para verificar a chave SSH do servidor, conclua as seguintes etapas:
- Faça o download da chave SSH do servidor referente ao console serial que você usará:
- No caso das conexões regionais, a chave SSH do servidor para uma região pode ser encontrada em
https://www.gstatic.com/vm_serial_port/region/region.pub
. - No caso das conexões globais, faça o download da chave SSH do servidor de portas seriais do Google.
- No caso das conexões regionais, a chave SSH do servidor para uma região pode ser encontrada em
- Abra seu arquivo de hosts conhecido, normalmente localizado em
~/.ssh/known_hosts
. Adicione o conteúdo da chave SSH do servidor, com o nome do host do servidor anexado à chave. Por exemplo, se a chave do servidor us-central1 tiver a linha
ssh-rsa AAAAB3NzaC1yc...
,~/.ssh/known_hosts
precisará ter uma linha semelhante ao seguinte:[us-central1-ssh-serialport.googleapis.com]:9600 ssh-rsa AAAAB3NzaC1yc...
De vez em quando, por motivos de segurança, o Google pode alterar a chave SSH do servidor de porta serial do Google. Se seu cliente não autenticar a chave do servidor, encerre imediatamente a tentativa de conexão e conclua as etapas anteriores para fazer o download de uma nova chave SSH do servidor de porta serial do Google.
Depois de atualizar a chave de host, se você continuar a receber um erro de autenticação de host de seu cliente, encerre as tentativas de conexão com a porta serial e entre em contato com o suporte do Google. Não forneça nenhuma credencial em uma conexão com falha na autenticação do host.
Como se desconectar do console serial
Para se desconectar do console serial, siga as etapas abaixo:
- Pressione a tecla
ENTER
. - Digite
~.
(til seguido de um ponto).
É possível descobrir outros comandos digitando ~?
ou examinando a página principal do SSH:
man ssh
Não use nenhum destes métodos para tentar se desconectar:
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.Os comandos
exit
oulogout
não funcionam porque o convidado não está ciente de nenhuma conexão de rede ou de modem. Usar esse comando causa o fechamento e a reabertura do console, e a conexão com a sessão permanece ativa. Para ativar os comandosexit
elogout
na sessão, configure a opçãoon-dtr-low
.
Conexão com um console serial por prompt de login
Se você estiver tentando resolver um problema com uma VM que inicializou completamente ou resolver um problema que ocorre após a inicialização no modo de usuário único, talvez receba uma solicitação para inserir informações de login ao tentar acessar o console serial.
Por padrão, as imagens de sistema 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 a VM estiver executando uma imagem predefinida com logins de portas seriais, será necessário configurar uma senha local nela para que seja possível fazer login no console serial, se solicitado. É possível configurar uma senha local depois de se conectar à VM ou usando um script de inicialização.
Como configurar uma senha local usando um script de inicialização
É possível usar um script de inicialização para configurar uma senha local que permita a conexão com o console serial durante ou após a criação da VM.
Para configurar uma senha local em uma VM, selecione uma das seguintes opções:
No console do Google Cloud, acesse a página Instâncias de VMs.
Na coluna Nome, clique no nome da VM em que você quer adicionar uma senha local.
A página de detalhes da VM é aberta.
Clique em
Editar.A página para editar os detalhes da VM é aberta.
Na seção Metadados > Automação, faça o seguinte:
Se a VM tiver um script de inicialização, remova-o e armazene-o em um local seguro.
Adicione o seguinte script de inicialização:
#!/bin/bash useradd
USERNAME echo 'USERNAME :PASSWORD ' | chpasswd usermod -aG google-sudoersUSERNAME Substitua:
USERNAME
: o nome de usuário que você quer adicionar.PASSWORD
: a senha do nome de usuário Como alguns sistemas operacionais exigem o comprimento mínimo e a complexidade da 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.
Clique em Salvar.
A página de detalhes da VM é aberta.
Clique em Redefinir.
Quando solicitado, insira suas informações de login.
No console do Google Cloud, acesse a página Instâncias de VMs.
Na coluna Nome, clique no nome da VM em que você quer adicionar uma senha local.
A página de detalhes da VM é aberta.
Clique em
Editar.A página para editar os detalhes da VM é aberta.
Na seção Metadados, faça o seguinte:
Se a VM tiver um script de inicialização, armazene-o em um local seguro e, para excluí-lo, clique em
Delete item.Clique em Adicionar item.
No campo Chave, digite
windows-startup-script-cmd
.No campo Valor, insira este script:
net user
USERNAME PASSWORD /ADD /Y net localgroup administratorsUSERNAME /ADDSubstitua:
USERNAME
: o nome de usuário que você quer adicionar.PASSWORD
: a senha do nome de usuário Como alguns sistemas operacionais exigem o comprimento mínimo e a complexidade da 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.
Clique em Salvar.
A página de detalhes da VM é aberta.
Clique em Redefinir.
Quando solicitado, insira suas informações de login.
Depois que o usuário for criado, substitua o script de inicialização pelo script armazenado nesta seção.
Como configurar 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 login no console serial dessa VM usando a senha especificada.
Conecte-se à VM. Substitua
instance-name
pelo nome da instância.gcloud compute ssh
instance-name Na instância, crie uma senha local com o comando a seguir. Isso define uma senha para o usuário utilizado para a conexão atual.
sudo passwd $(whoami)
Siga os prompts para criar uma senha.
Em seguida, saia da instância e estabeleça conexão com o console serial.
Insira suas informações de login quando solicitado.
Como configurar um login em outras portas seriais
Por padrão, os prompts de login estão ativados na porta 1 na maioria dos sistemas operacionais Linux. Contudo, a porta 1 pode ficar sobrecarregada registrando dados e outras informações enviadas para ela. Em vez disso, opte por ativar um prompt de login em outra porta, como a porta 2 (ttyS1), executando um dos seguintes comandos na VM. É possível ver uma lista das portas disponíveis para uma VM em Noções básicas sobre a numeração de portas seriais.
A tabela a seguir relaciona as imagens pré-configuradas com um login do console serial e as portas padrão.
Sistema operacional | Portas com um prompt de login por padrão | Gerenciamento de serviços |
---|---|---|
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 | N/A |
Para ativar solicitações de login em mais portas seriais, siga as instruções abaixo.
Para sistemas operacionais Linux que usam systemd
, siga estas instruções:
Ative o serviço temporariamente até a próxima reinicialização:
sudo systemctl start serial-getty@ttyS1.service
Ative o serviço permanentemente, a partir da próxima reinicialização:
sudo systemctl enable serial-getty@ttyS1.service
Para sistemas operacionais Linux que usam upstart
, siga estas instruções:
Crie um novo arquivo
/etc/init/ttyS1.conf
para refletirttyS1
copiando e modificando um arquivottyS0.conf
. 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 no 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"
Inicie uma solicitação de login em
ttyS1
sem reiniciar:sudo start ttyS1
Para sistemas operacionais Linux que usam sysvinit
, execute o seguinte comando:
sudo sed -i~ -e 's/^#T([01])/T\1/' /etc/inittab sudo telinit q
Como entender a numeração de portas seriais
Cada instância de máquina virtual tem quatro portas seriais. Para manter a consistência com a API getSerialPortOutput
, cada porta é numerada de 1 a 4. O Linux e outros sistemas parecidos numeram as portas seriais de 0 a 3. Por exemplo, em muitas imagens de sistema operacional, os dispositivos correspondentes vão de /dev/ttyS0
a /dev/ttyS3
. O Windows faz referência às portas seriais de COM1
a COM4
. Para estabelecer conexão com o que o Windows considera como COM3
e o Linux considera como ttyS2
, você especificaria a porta 3. Use
a tabela a seguir para descobrir a qual porta você deve se conectar.
Portas seriais da 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 |
Note que muitas imagens do Linux usam a porta 1 (/dev/ttyS0
) para gerar registros de mensagens provenientes do kernel e dos programas do sistema.
Como enviar uma interrupção serial
O recurso chave Magic SysRq permite realizar tarefas simples, independentemente do estado do sistema. Por exemplo, é possível sincronizar sistemas de arquivos, reinicializar a instância, encerrar processos e desativar sistemas de arquivos usando o recurso de chave Magic SysRq.
Para enviar um comando Magic SysRq usando uma interrupção serial simulada, siga as etapas abaixo:
- Pressione a tecla
ENTER
. - Digite
~B
(til seguido deB
maiúsculo). - Digite o comando Magic SysRq.
Como visualizar registros de auditoria do console serial
O Compute Engine fornece registros de auditoria para rastrear quem estabeleceu e encerrou uma conexão com o console serial de uma instância. Para ver os registros, é preciso ter permissões para o Logs Viewer ou ser um visualizador ou editor do projeto.
- No Console do Google Cloud, acesse a página do Explorador de registros.
- Expanda o menu suspenso e selecione GCE VM Instance.
- Na barra de pesquisa, digite
ssh-serialport.googleapis.com
e pressione Enter. - Uma lista de registros de auditoria é exibida. Os registros descrevem conexões e desconexões de um console serial. Abra qualquer uma das entradas para mais informações.
Em qualquer um dos registros de auditoria, é possível realizar estas ações:
- Expandir a propriedade
protoPayload
. - Procurar por
methodName
para ver a atividade à qual esse registro se aplica. Pode ser uma solicitação de conexão ou desconexão. Por exemplo, se o registro rastrear uma desconexão do console serial, o nome do método será"google.ssh-serialport.v1.disconnect"
. Da mesma forma, um registro de conexão seria"google.ssh-serialport.v1.connect"
. Uma entrada no registro de auditoria é registrada no início e no fim de cada sessão no console serial.
Há diferentes propriedades de registros de auditoria para tipos de registro distintos. Por exemplo, os registros de auditoria relacionados às conexões têm propriedades específicas dos registros de conexão, enquanto os registros de auditoria para desconexões têm seu próprio conjunto de propriedades. Há algumas propriedades que também são compartilhadas entre ambos os tipos de registro.
Todos os registros do console serial
A tabela a seguir fornece propriedades do registro de auditoria e os respectivos valores para todos os registros 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 que contém o ID do projeto, a zona, o nome da instância e o número da porta serial para indicar a que console serial 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 |
Carimbo de data e 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. Use-a 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 registro de auditoria e os respectivos valores específicos para registros 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 essa solicitação. Ele é usado para selecionar a chave pública correspondente. |
operation.first |
TRUE |
status.code |
Para solicitações de conexão bem-sucedidas, o valor status.code de google.rpc.Code.OK indica a conclusão da operação sem nenhum erro. Como o valor da enum desta propriedade é
0 , a propriedade status.code não é exibida.
No entanto, qualquer código que confirmar um valor status.code de
google.rpc.Code.OK funcionará conforme o esperado. |
Registros de desconexão
A tabela a seguir fornece propriedades do registro de auditoria e os respectivos valores específicos para registros de desconexão:
Propriedade | Valor |
---|---|
methodName |
google.ssh-serialport.v1.disconnect |
response.duration |
O tempo, em segundos, que a sessão durou. |
response.@type |
type.googleapis.com/google.compute.SerialConsoleSessionEnd |
operation.last |
TRUE |
Registros de falhas na conexão
Quando ocorre falha na conexão, o Compute Engine cria uma entrada no registro de auditoria. O registro de uma falha na conexão é bem parecido com a entrada de uma conexão bem-sucedida, mas tem as propriedades a seguir para indicar a falha na conexão.
Propriedade | Valor |
---|---|
severity |
ERROR |
status.code |
O código de erro canônico da Google API que melhor descreve o erro. Os itens a seguir são possíveis códigos de erro que podem ser exibidos:
|
status.message |
A mensagem legível referente a essa entrada. |
Como desativar o acesso ao console serial interativo
Você pode desativar o acesso ao console serial interativo alterando metadados na instância ou no projeto específico ou definindo uma política da organização que desativa o acesso ao console serial interativo para todas as instâncias de VM de um ou mais projetos que fazem parte da organização.
Como desativar o console serial interativo em uma instância ou projeto específico
Proprietários e editores do projeto, bem como usuários que receberam o papel compute.instanceAdmin.v1
, podem desativar o acesso ao console serial alterando os metadados na instância ou projeto específico. De maneira semelhante à ativação do acesso ao console serial, defina os metadados serial-port-enable
como FALSE
:
serial-port-enable=FALSE
Por exemplo, usando a Google Cloud CLI, é possível aplicar esses metadados a uma instância específica, como:
gcloud compute instances add-metadatainstance-name \ --metadata=serial-port-enable=FALSE
Para aplicar os metadados ao projeto:
gcloud compute project-info add-metadata \ --metadata=serial-port-enable=FALSE
Como desativar o acesso ao console serial interativo por meio da política da organização
Se você tiver recebido o papel orgpolicy.policyAdmin
na organização, defina uma política da organização que impeça o acesso interativo ao console serial, independentemente do acesso ao console serial interativo estar ativado no servidor de metadados. Depois que a política da organização for definida, ela modificará efetivamente a chave de metadados serial-port-enable
, e nenhum usuário da organização ou projeto poderá ativar o acesso ao console serial interativo. Por padrão, essa restrição é definida como FALSE
.
A restrição para desativar o acesso ao console serial interativo é a seguinte:
compute.disableSerialPortAccess
Conclua as instruções a seguir para definir essa política na organização. Depois de configurar uma política, é possível conceder isenções por projeto.
Para definir a política usando a Google Cloud CLI, execute o
comando resource-manager enable-enforce
. Substitua
organization-id
pelo
ID da organização.
Por exemplo, 1759840282
.
gcloud resource-manager org-policies enable-enforce \ --organizationorganization-id compute.disableSerialPortAccess
Para definir uma política na API, faça uma solicitação POST
ao seguinte URL:
Substitua organization-name
pelo nome da organização.
Por exemplo, organizations/1759840282
.
POST https://cloudresourcemanager.googleapis.com/v1/organization-name :setOrgPolicy
O corpo da solicitação precisa conter um objeto policy
com a seguinte restrição:
"constraint": "constraints/compute.disableSerialPortAccess"
Exemplo:
{ "policy": { "booleanPolicy": { "enforced": TRUE }, "constraint": "constraints/compute.disableSerialPortAccess" } }
A política entra em vigor imediatamente. Por isso, os projetos sob a organização deixam de permitir o acesso interativo ao console serial.
Para desativar temporariamente a política, use o comando disable-enforce
:
gcloud resource-manager org-policies disable-enforce \ --organizationorganization-id compute.disableSerialPortAccess
Como alternativa, faça uma solicitação de API em que o corpo da solicitação define o parâmetro enforced
como FALSE
:
{ "policy": { "booleanPolicy": { "enforced": FALSE }, "constraint": "constraints/compute.disableSerialPortAccess" } }
Como definir a política da organização para envolvidos no projeto
Você pode definir a mesma política organizacional por projeto. Isso substitui a definição no nível da organização.
Para desativar a aplicação dessa política para um projeto específico, use o comando a seguir. Substitua project-id
pelo ID do projeto.
gcloud resource-manager org-policies disable-enforce \ --projectproject-id compute.disableSerialPortAccess
É possível ativar a aplicação dessa política usando o comando enable-enforce
com os mesmos valores.
Na API, faça uma solicitação POST
para seguinte URL a fim de ativar o acesso ao console serial interativo para projeto, substituindo project-id
pelo ID do projeto:
POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id :setOrgPolicy
O corpo da solicitação precisa conter um objeto policy
com a seguinte restrição:
"constraint": "constraints/compute.disableSerialPortAccess"
Exemplo:
{ "policy": { "booleanPolicy": { "enforced": FALSE }, "constraint": "constraints/compute.disableSerialPortAccess" } }
Dicas e sugestões
Se estiver com dificuldade para se conectar usando um cliente SSH padrão, mas o comando
gcloud compute connect-to-serial-port
fizer isso com sucesso, pode ser útil executargcloud compute connect-to-serial-port
com a opção de linha de comando--dry-run
para ver o comando SSH que teria sido executado em seu nome e comparar as opções dele às do comando que você está usando.Configuração da taxa de bits, também conhecida como "baud rate": é possível definir a taxa de bits que quiser, como
stty 9600
, mas o recurso normalmente força a taxa efetiva para 115.200 bps (aproximadamente 11,5 kB/s). Isso ocorre porque muitas imagens públicas usam taxas de bits baixas por padrão no console serial, como 9.600, o que causa uma inicialização lenta.Algumas imagens de SO têm padrões inadequados na porta serial. Por exemplo, no CentOS 7, o padrão de
stty icrnl
para a tecla Enter no console é enviar umCR
, também conhecido como^M
. O shell de Bash pode mascarar isso até você tentar definir uma senha. Nesse momento, você se perguntará por que ele aparenta estar parado no promptpassword:
.Algumas imagens públicas têm chaves de controle de job que serão desativadas por padrão se você anexar um shell a uma porta usando determinadas maneiras. Alguns exemplos dessas chaves incluem
^Z
e^C
. O comandosetsid
pode corrigir isso. Caso contrário, se você receber uma mensagemjob control is disabled in this shell
, tome cuidado para não executar comandos que precisará interromper.Pode ser útil informar ao sistema o tamanho da janela que você está usando, assim o Bash e os editores podem gerenciá-la corretamente. Caso contrário, é possível notar 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 a sinalizaçãostty -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 à máquina B e, depois, à máquina C criando uma sessão SSH aninhada e quiser usar comandos til (~) para se desconectar ou enviar um sinal de interrupção serial, será preciso adicionar caracteres til extras o suficiente ao comando para acessar o cliente SSH correto. Um comando após um único til é interpretado pelo cliente SSH na máquina A, um comando após dois tis consecutivos (Enter~~) é interpretado pelo cliente na máquina B e assim por diante. Você só precisa pressionar Enter uma vez, porque ele é totalmente transmitido para o destino SSH mais interno. Isso é válido para qualquer uso de clientes SSH que forneçam o recurso til de escape.
Se você perder a conta do número de caracteres til necessários, pressione a tecla Enter e digite os caracteres til, um de cada vez, até que a instância retorne o til novamente. Esse eco indica que você chegou ao fim da cadeia e agora sabe que para enviar um comando til ao cliente SSH mais aninhado, você precisa de um til a menos do que o número de tis digitado.
Opções avançadas
Também é possível usar as opções avançadas a seguir com a porta serial.
Controle do máximo de conexões
É possível definir a propriedade max-connections
para controlar quantas conexões simultâneas podem ser estabelecidas nessa porta serial em um período. O número padrão e máximo de conexões é 5. Exemplo:
gcloud compute connect-to-serial-portinstance-name \ --portport-number \ --extra-args max-connections=3
ssh -iprivate-ssh-key-file -p 9600project-id .zone .instance-name .username .max-connections=3@ssh-serialport.googleapis.com
Configuração de opções de nova reprodução
Por padrão, sempre que você se conectar ao console serial, receberá uma nova reprodução das últimas 10 linhas de dados, independentemente de terem sido vistas por outro cliente SSH. É possível alterar essa configuração e controlar quantas e quais linhas são retornadas configurando as seguintes opções:
replay-lines=N
: definaN
como o número de linhas que você quer reproduzir novamente. Por exemplo, seN
for 50, as últimas 50 linhas da saída do console serão incluídas.replay-bytes=N
: reproduz os bytesN
mais recentes. Também é possível definirN
comonew
, o que reproduz novamente toda a saída que não foi enviada ainda a nenhum cliente.replay-from=N
: reproduz a saída a partir de um índice de byte absoluto fornecido. Para receber o índice de byte atual da saída do console serial, faça uma solicitaçãogetSerialPortOutput
. Se você definirreplay-from
, todas as outras opções de reprodução serão ignoradas.
Com a Google Cloud CLI, anexe a opção a seguir ao comando connect-to-serial-port
,
em que N
é o número especificado de linhas,
ou bytes ou índice de byte absoluto, dependendo da opção de nova reprodução
selecionada:
--extra-args replay-lines=N
Se estiver usando um cliente SSH de terceiros, forneça esta opção em seu comando SSH:
ssh -iprivate-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane.port=3.replay-lines=N@ssh-serialport.googleapis.com
Também é possível usar uma combinação dessas opções. Exemplo:
replay-lines=N
ereplay-bytes=new
- Reproduzem o número especificado de linhas ou reproduzem novamente toda a saída não enviada anteriormente a nenhum cliente, o que for maior. O primeiro cliente a estabelecer conexão com essa combinação de sinalizações verá que toda a saída foi enviada para a porta serial, e os clientes que estabelecerem conexão posteriormente verão somente as últimas
N
linhas. Exemplos:
gcloud compute connect-to-serial-portinstance-name --portport-number --extra-args replay-lines=N,replay-bytes=new
ssh -iprivate-ssh-key-file -p 9600project-id .zone .instance-name .username .replay-lines=N.replay-bytes=new@ssh-serialport.googleapis.com
replay-lines=N
ereplay-bytes=M
- Reproduzem novamente o número de linhas ou bytes descritos por essas sinalizações, o que for menor. Essa opção não vai reproduzir mais do que
N
ouM
bytes.
gcloud compute connect-to-serial-portinstance-name --portport-number --extra-args replay-lines=N,replay-bytes=M
ssh -iprivate-ssh-key-file -p 9600project-id .zone .instance-name .username .replay-lines=N.replay-bytes=M@ssh-serialport.googleapis.com
Como processar a saída eliminada
O 1 MiB de saída mais recente de cada porta serial sempre está disponível e,
em geral, o cliente SSH não perde nenhuma saída da porta serial.
Se, por algum motivo, seu cliente SSH deixar de aceitar a saída por um período, mas não encerrar a conexão, e mais de 1 MiB de novos dados for produzido, ele poderá perder esses dados. Quando seu cliente SSH não estiver aceitando dados com rapidez o suficiente para acompanhar a saída na porta serial do console, defina a propriedade on-dropped-output
para determinar o comportamento do console.
Defina qualquer uma das seguintes opções aplicáveis com esta propriedade:
insert-stderr-note
: insira uma observação nostderr
do cliente SSH, indicando que a saída foi eliminada. Essa é a opção padrão.ignore
: elimina a saída silenciosamente e não executa nenhuma ação.disconnect
: interrompe a conexão.
Exemplo:
gcloud compute connect-to-serial-portinstance-name \ --portport-number \ --extra-args on-dropped-output=ignore
ssh -iprivate-ssh-key-file -p 9600project-id .zone .instance-name .username .on-dropped-output=ignore@ssh-serialport.googleapis.com
Como ativar a desconexão usando os comandos exit ou logout
É possível ativar a desconexão nos comandos exit ou logout configurando a propriedade on-dtr-low
como disconnect
ao estabelecer conexão com o console serial.
Na Google Cloud CLI, anexe a seguinte sinalização ao seu
comando connect-to-serial-port
:
--extra-args on-dtr-low=disconnect
Se estiver usando um cliente SSH de terceiros, forneça esta opção em seu comando SSH:
ssh -iprivate-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane.port=3.on-dtr-low=disconnect@ssh-serialport.googleapis.com
Ativar a opção disconnect
pode fazer com que sua instância se desconecte uma ou mais vezes quando você reinicia a instância porque o sistema operacional redefine as portas seriais durante a inicialização.
A configuração padrão da opção on-dtr-low
é none
. Se você usar a
configuração padrão none
, poderá reinicializar a instância sem que ela seja desconectada
do console serial, mas o console não se desconectará por meios normais,
como os comandos exit
ou logout
, ou combinações de teclas normais, como
Ctrl + D.
A seguir
- Saiba mais sobre a API
getSerialPortOutput
. - Saiba como reter e visualizar a saída da porta serial mesmo após uma instância de VM ter sido excluída.
- Leia mais sobre dicas para solução de problemas.
- Saiba mais sobre a aplicação de metadados.
- Saiba mais sobre chaves SSH.