O Google Distributed Cloud (GDC) isolado usa a autenticação SSH baseada em chave para estabelecer conexões com instâncias de máquina virtual (VM) do Linux. Por padrão, as senhas não são configuradas para usuários locais em VMs do Linux.
Antes de começar
Antes de se conectar a uma VM, é preciso atender aos seguintes pré-requisitos:
- Ativar o gerenciamento de acesso. Não é possível continuar sem o gerenciamento de acesso ativado no ambiente de convidado. Por padrão, o gerenciamento de acesso é ativado em novas VMs.
- Ative o acesso externo da VM
para qualquer peer na porta 22 do protocolo TCP (TCP).
- Para VMs do Windows, ative o acesso externo à VM na porta 3389.
- Configure um recurso personalizado
ProjectNetworkPolicy(PNP) no projeto em que a VM reside.- Ao configurar um PNP no projeto, é possível acessar a VM fora do projeto ou da organização.
- Para diagnosticar se você não tem um PNP, pergunte ao operador de infraestrutura (IO).
- Acesso de login ao cluster. Siga as etapas da CLI em Fazer login para fazer login no cluster.
gdcloud, verifique se você baixou, instalou
e configurou a CLI gdcloud.
Todos os comandos da Distributed Cloud usam a CLI gdcloud ou
kubectl e exigem um ambiente Linux.
Extrair o caminho do arquivo kubeconfig
Para executar comandos no servidor da API Management, verifique se você tem os seguintes recursos:
Faça login e gere o arquivo kubeconfig para o servidor da API Management se você não tiver um.
Use o caminho para o arquivo kubeconfig do servidor da API Management para substituir
MANAGEMENT_API_SERVERnestas instruções.
Solicitar permissões e acesso
Para executar as tarefas listadas nesta página, você precisa ter o papel de administrador de máquina virtual do projeto. Siga as etapas para
verificar
se você tem o papel de administrador de máquina virtual do projeto (project-vm-admin) no namespace
do projeto em que a VM reside.
Para operações de VM usando o console do GDC ou a CLI gdcloud,
peça ao administrador do IAM do projeto para atribuir a você os papéis de
administrador de máquina virtual do projeto e leitor do projeto (project-viewer).
Estabelecer uma conexão de VM
Nesta seção, descrevemos como estabelecer uma conexão com VMs do Linux e do Windows.
Conectar-se a uma VM do Linux
Para estabelecer uma conexão com uma VM Linux, use o console do GDC, a CLI gdcloud ou a API Virtual Machine Manager.
Console
No menu de navegação, clique em Virtual Machines > Instâncias.
Na lista de VMs, encontre a linha da VM em execução a que você quer se conectar. Na coluna Conectar, clique em SSH.
Um terminal do navegador SSH é aberto. Insira qualquer comando no shell ou clique em FTP para navegar pela estrutura de arquivos e fazer upload deles.
gdcloud
Conecte-se a uma VM usando SSH executando o comando gdcloud compute ssh
gdcloud compute ssh VM_NAME --project=PROJECT_ID
Substitua as seguintes variáveis:
- VM_NAME: o nome da VM.
- PROJECT_ID: o ID do projeto que contém a VM.
Se você tiver
definido propriedades padrão
para a CLI, poderá omitir a flag --project desse comando. Exemplo:
gdcloud compute ssh VM_NAME
API
Conecte-se a uma VM:
- Abra um terminal.
- Crie um par de chaves SSH.
- Faça o upload da chave pública e do nome de usuário com um valor de time-to-live (TTL).
O GDC recupera a chave SSH e o nome de usuário e cria uma
conta de usuário com o nome de usuário. Em VMs Linux, o GDC armazena
a chave pública no arquivo ~/.ssh/authorized_keys do usuário na VM.
Conclua as etapas a seguir para se conectar a uma VM pela linha de comando:
Crie um par de chaves SSH e um nome de usuário.
Em estações de trabalho Linux e macOS, use o utilitário
ssh-keygenpara criar um novo par de chaves SSH. O exemplo de código a seguir cria um par de chaves RSA (Rivest–Shamir–Adleman):ssh-keygen -t rsa -f ~/.ssh/KEY_FILENAME -C USERNAME -b 2048Substitua as variáveis usando as seguintes definições.
Variável Definição KEY_FILENAMEO nome do arquivo de chave SSH. Por exemplo, o nome de arquivo my-ssh-keygera um arquivo de chave privada chamadomy-ssh-keye um arquivo de chave pública chamadomy-ssh-key.pub.USERNAMESeu nome de usuário na VM, como testuseroutestuser_gmail_com.O utilitário
ssh-keygensalva o arquivo de chave privada no caminho~/.ssh/KEY_FILENAMEe o arquivo de chave pública no caminho~/.ssh/KEY_FILENAME.pub.Uma chave pública para o usuário
testuseré semelhante a este exemplo:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... testuserFaça upload da chave para a VM e crie um recurso do Kubernetes com a chave pública, o nome de usuário e o valor de time to live (TTL) da chave.
O exemplo a seguir usa um arquivo
access_request.yamlpara conceder acesso à instância de VM com a chave privadaKEY_FILENAMEe um valor de TTL de dez minutos:apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineAccessRequest metadata: namespace: VM_NAMESPACE name: AR_NAME spec: ssh: key: | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... cloudysanfrancisco ttl: 10m user: USERNAME vm: VM_NAMESubstitua as variáveis usando as seguintes definições:
Variável Definição VM_NAMESPACEO namespace da VM. AR_NAMEO nome do pedido de acesso. USERNAMESeu nome de usuário na VM, como testuseroutestuser_gmail_com.VM_NAMEO nome da instância de VM. Crie a chave:
kubectl create -f access_request.yaml --kubeconfig MANAGEMENT_API_SERVERVerifique o status da sua solicitação de acesso:
kubectl get virtualmachineaccessrequests.virtualmachine.gdc.goog -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVERSubstitua
VM_NAMESPACEpelo namespace da VM.Um status
configuredindica que você pode se conectar à VM.Conecte-se à VM:
ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IPSubstitua os seguintes valores:
PATH_TO_PRIVATE_KEYcom o caminho para o arquivo de chave SSH privada que corresponde à chave pública adicionada à VM.USERNAMEcom o nome de usuário especificado ao criar a chave SSH. Por exemplo,cloudysanfrancisco_example_comoucloudysanfrancisco.EXTERNAL_IPcom o endereço IP de entrada externo da VM.
Solução de problemas
Nesta seção, descrevemos como solucionar problemas que podem ocorrer ao se conectar a uma instância de VM depois de criar a solicitação de acesso.
Siga estas etapas para identificar possíveis problemas:
Verifique se a VM está em execução. Substitua as variáveis editáveis pelos seus valores no comando a seguir:
kubectl get virtualmachines.virtualmachine.gdc.goog VM_NAME -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVERSe a VM não estiver em execução, não será possível se conectar ou configurar novas solicitações.
Verifique se a VM está em execução há alguns minutos. Se a VM tiver acabado de ser iniciada, os serviços necessários para o acesso SSH ainda não estarão em execução. Normalmente, eles são executados em até cinco minutos após a inicialização.
Verifique se você não excedeu o valor de TTL na solicitação de acesso. A chave é removida quando o tempo atinge o valor de TTL.
Se o
VirtualMachineAccessRequestmostrar um statusconfigured, verifique os seguintes requisitos:- Você ativou a transferência de dados para sua VM na porta 22.
- Sua máquina é encaminhada para a VM. Por exemplo, é possível usar o comando
curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22para verificar o roteamento.
Se o
VirtualMachineAccessRequestmostrar um statusfailed, confira o status completo e analise a mensagem de erro que indica o motivo da falha na solicitação:kubectl describe virtualmachineaccessrequest.virtualmachine.gdc.goog AR_NAME -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVERSubstitua as variáveis editáveis no comando anterior pelos seus próprios valores.
Se o status do
VirtualMachineAccessRequestestiver em branco, talvez o ambiente convidado não esteja em execução.
Conectar-se a uma VM do Windows
Para se conectar a uma VM do Windows, é necessário usar o protocolo de área de trabalho remota (RDP)
em um aplicativo de área de trabalho remota. Para acessar a VM por RDP, você precisa de uma
senha que pode ser recuperada no console do GDC ou no
recurso personalizado VirtualMachinePasswordResetRequest
da API Virtual Machine Manager.
Antes de continuar, instale o cliente de computador remoto. Use o link a seguir para concluir as etapas com base no seu SO específico. Para acessar o link, você precisa de uma conexão de Internet.
https://remmina.org/how-to-install-remmina/
Para estabelecer uma conexão de VM do Windows, siga estas etapas:
Console
- No menu de navegação, clique em Máquinas virtuais > Instâncias.
- Na lista de VMs, procure a VM do Windows em execução para se conectar.
- Na coluna Ações, clique em Redefinir senha. A caixa de diálogo Definir nova senha do Windows aparece.
- No campo Nome de usuário, digite seu nome de usuário.
- Clique em Definir. A caixa de diálogo Nova senha do Windows aparece com uma senha gerada aleatoriamente. Essa senha contém caracteres alfanuméricos e não alfanuméricos.
- Clique em Copiar.
- Navegue até o cliente de área de trabalho remota e selecione seu nome de usuário.
- No campo de entrada Senha, digite sua senha.
- Pressione ENTER ou RETURN.
API
Gere uma chave RSA. Você precisa dessa chave para extrair a senha do recurso
VirtualMachinePasswordResetRequest.openssl genrsa -out private-key.pem 2048 # Get the RSA public key openssl rsa -in private-key.pem -outform PEM -puboutCrie um arquivo YAML.
Faça upload da chave RSA gerada, do nome da VM e de um nome de usuário para acessar o cliente de área de trabalho remota:
apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachinePasswordResetRequest metadata: namespace: VM_NAMESPACE name: PRR_NAME spec: vmName: VM_NAME user: USERNAME publicKey: PUBLIC_KEYSubstitua as variáveis usando as seguintes definições:
Variável Definição VM_NAMESPACE O nome do namespace em que a VM reside. PRR_NAME O nome que você dá à solicitação de redefinição de senha. Por exemplo, vmprr2VM_NAME O nome da VM. Por exemplo, vm-testUSERNAME O nome de usuário usado para fazer login na VM com o cliente de área de trabalho remota. Por exemplo, test-userPUBLIC_KEY A chave RSA gerada na etapa 2. É necessário formatar PUBLIC_KEY em várias linhas. O exemplo a seguir mostra um arquivo YAML com os valores e a formatação necessários para fazer uma solicitação de redefinição de senha:
apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachinePasswordResetRequest metadata: namespace: test-namespace name: vmprr2 spec: vmName: vm2 user: test-user publicKey: |- -----BEGIN PUBLIC KEY----- # Input the RSA key data in multi-line format. -----END PUBLIC KEY-----Aplique o conteúdo do arquivo:
kubectl --kubeconfig=MANAGEMENT_API_SERVER apply -f FILENAMESubstitua FILENAME pelo nome do arquivo para o pedido de redefinição de senha.
Confira o status do recurso
VirtualMachinePasswordResetRequest. Desde que a VM esteja no estadoRunning, o recurso vai gerar a senha em um minuto ou menos.kubectl --kubeconfig=MANAGEMENT_API_SERVER describe \ -n VM_NAMESPACE PRR_NAMELocalize o campo
status.encryptedPasswordque contém a senha gerada.Copie o valor em
status.encryptedPassworde descriptografe a senha gerada:echo ENCRYPTED_PASSWORD | base64 -d > PASSWORD_FILENAME openssl pkeyutl -decrypt -in PASSWORD_FILENAME -inkey private-key.pem \ -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha1 -pkeyopt rsa_mgf1_md:sha1Substitua:
- ENCRYPTED_PASSWORD: a senha gerada
do campo
status.encryptedPassword. - PASSWORD_FILENAME: um arquivo temporário para armazenar a senha decodificada em base64.
Depois disso, a senha descriptografada vai aparecer como saída para você se conectar à VM pelo RDP.
- ENCRYPTED_PASSWORD: a senha gerada
do campo
Abra o cliente de área de trabalho remota e clique em Perfil de conexão remota. Uma caixa de diálogo de conexão vai aparecer.
Na guia Básico, insira seus valores nos seguintes campos:
- Servidor: o endereço IP de entrada do status de acesso externo da VM com o número da porta de acesso externo da VM anexado. Para buscar o endereço IP de entrada, consulte Ingress.
- Nome de usuário: o nome de usuário especificado na solicitação de redefinição de senha.
Por exemplo,
test-user. - Senha: a senha gerada que você descriptografou do status da solicitação de redefinição de senha.
Clique em Salvar e conectar.