Como gerenciar chaves SSH em metadados

Neste guia, mostramos como controlar o acesso a instâncias do Linux ao criar chaves SSH e editar metadados de chave SSH pública.

Também é possível se conectar a instâncias por meio do Console do Google Cloud Platform, onde o Compute Engine gerencia automaticamente o ciclo de vida completo de suas chaves ou usando a linha de comando gcloud no SDK, onde o Compute Engine configura metadados de chaves SSH persistentes.

Se você for um usuário avançado que precisa gerenciar chaves SSH manualmente, consulte Como gerenciar o acesso a instâncias usando o Login do SO. Se você gerenciar suas chaves SSH por meio do Login do SO em instâncias, as configurações de chave SSH baseadas em metadados nessas instâncias serão desativadas.

Antes de começar

Permissões necessárias para a tarefa

Para executar esta tarefa, é preciso ter as permissões abaixo.

  • compute.instances.setMetadata na instância, para configurar metadados na instância;
  • compute.projects.setCommonInstanceMetadata no projeto, para configurar metadados do projeto todo.
  • iam.serviceAccounts.actAs no projeto, para configurar metadados do projeto todo.

Riscos do gerenciamento manual de chaves

Se você mesmo criar e gerenciar chaves SSH públicas por meio do Console do GCP, da ferramenta de linha de comando gcloud ou da API, será necessário rastrear as chaves usadas e excluir as chaves SSH públicas dos usuários que não terão acesso. Por exemplo, se um membro da equipe deixar seu projeto, remova as chaves SSH públicas dos metadados para que eles não possam continuar acessando suas instâncias.

Além disso, especificar incorretamente a ferramenta gcloud ou as chamadas de API pode limpar todas as chaves SSH públicas do projeto ou das instâncias, o que interrompe as conexões dos membros do projeto.

Se você não tiver certeza de que quer gerenciar suas próprias chaves, use as ferramentas do Compute Engine para se conectar às suas instâncias.

Visão geral

Ao criar e gerenciar chaves SSH, você permite que os usuários acessem uma instância do Linux por meio de ferramentas de terceiros.

Uma chave SSH consiste nos seguintes arquivos:

  • um arquivo de chave SSH pública aplicado a metadados da instância ou de todo o projeto
  • Um arquivo de chave SSH particular armazenado pelo usuário nos dispositivos locais

Se um usuário apresentar sua chave SSH privada, ele poderá usar uma ferramenta de terceiros para se conectar a qualquer instância configurada com o arquivo de chave SSH público correspondente, mesmo que não seja um membro do projeto do Google Cloud Platform. Portanto, controle as instâncias acessadas por um usuário, alterando os metadados da chave SSH pública para uma ou mais instâncias.

Para editar metadados da chave SSH pública:

  1. Decida qual ferramenta você usará para editar metadados:

  2. Se for necessário adicionar usuários a uma instância do Linux, prepare as chaves SSH públicas do usuário com os seguintes processos:

  3. Edite metadados de chave SSH pública para adicionar usuários a uma instância do Linux ou removê-los.

  4. Conecte-se à sua instância Linux por meio de uma ferramenta de terceiros para garantir que cada chave SSH pública seja adicionada ou removida corretamente. Um usuário só pode se conectar a uma instância se a chave SSH pública estiver disponível para a instância no servidor de metadados e se ele tiver a chave SSH particular correspondente.

Como criar uma nova chave SSH

Se você não tiver um arquivo de chave SSH privada e um arquivo de chave SSH pública correspondente que possa usar, gere uma nova chave SSH. Para usar uma chave SSH atual, localize o arquivo de chave SSH pública.

Linux e macOS

Nas estações de trabalho Linux ou macOS, gere uma chave com a ferramenta ssh-keygen.

  1. Abra um terminal em sua estação de trabalho e use o comando ssh-keygen para gerar uma nova chave. Especifique a sinalização -C para adicionar um comentário com seu nome de usuário.

    ssh-keygen -t rsa -f ~/.ssh/[KEY_FILENAME] -C [USERNAME]
    

    em que:

    • [KEY_FILENAME] é o nome que você quer usar para os arquivos de chave SSH. Por exemplo, um nome de arquivo my-ssh-key gera um arquivo de chave particular denominado my-ssh-key e um arquivo de chave pública denominado my-ssh-key.pub;
    • [USERNAME] é o nome de usuário do usuário que se conecta à instância.

    Esse comando gera um arquivo de chave SSH privada e uma chave SSH pública correspondente com a seguinte estrutura:

    ssh-rsa [KEY_VALUE] [USERNAME]
    

    em que:

    • [KEY_VALUE] é o valor da chave que você gerou.
    • [USERNAME] é o usuário a que essa chave se aplica.
  2. Restrinja o acesso à chave particular para que somente você possa ler a chave e ninguém possa gravar dados nela.

    chmod 400 ~/.ssh/[KEY_FILENAME]
    

    em que [KEY_FILENAME] é o nome que você usou para seus arquivos de chave SSH.

Repita este processo para cada usuário que precisar de uma nova chave. Em seguida, localize as chaves SSH públicas criadas, bem como todas as chaves SSH públicas existentes que você pretende adicionar a um projeto ou instância.

Windows

O Windows não tem uma ferramenta integrada para gerar chaves SSH. Portanto, é preciso usar uma ferramenta de terceiros para gerar chaves SSH se estiver em uma estação de trabalho Windows. Veja como gerar chaves SSH com a ferramenta PuTTYgen (em inglês).

  1. Faça o download do puttygen.exe (em inglês).

  2. Execute o PuTTYgen. Neste exemplo, basta executar o arquivo puttygen.exe do download que você fez. Uma janela é aberta para que você defina as configurações da geração de chaves.

  3. Clique em Gerar e siga as instruções na tela para gerar uma nova chave. Na maioria dos casos, os parâmetros padrão estão corretos, mas as chaves precisam ser de, pelo menos, 2.048 bits. Quando você terminar de gerar a chave, a ferramenta exibirá seu valor de chave pública.

  4. Na seção Comentários sobre a chave, substitua o texto atual pelo nome do usuário a quem você aplicará a chave.

  5. Opcionalmente, insira uma senha longa de chave para proteger essa chave.

  6. Clique em Salvar chave privada para gravá-la em um arquivo com a extensão .ppk.

  7. Clique em Salvar chave pública para salvá-la em um arquivo e usá-la depois. Mantenha a janela PuTTYgen aberta por enquanto.

    A chave pública formatada corretamente está disponível na parte superior da tela do PuTTYgen:

    Captura de tela da chave pública PuTTYgen

    Essa chave pública tem a seguinte estrutura:

    ssh-rsa [KEY_VALUE] [USERNAME]
    

    em que:

    • [KEY_VALUE] é o valor da chave que você gerou.
    • [USERNAME] é o usuário a quem essa chave se aplica.

Repita esse processo para cada usuário para quem é preciso criar uma chave. Em seguida, caso você tenha outras chaves SSH públicas para usuários a quem você pretende adicionar um projeto ou instância, localize agora as chaves públicas deles. Caso contrário, formate as chaves SSH públicas que você criou.

Como localizar uma chave SSH

Há diversas razões pelas quais você precisa localizar uma chave SSH. Por exemplo, para adicionar a chave SSH pública de um usuário a um projeto ou instância, é preciso acessar o arquivo de chave pública da chave dele. Como alternativa, localize seu arquivo de chave SSH particular para se conectar a uma instância do Linux.

Quando uma chave SSH é criada, ela é salva em um local padrão. Os locais e nomes padrão dos seus arquivos de chaves SSH públicas e particulares dependem das ferramentas usadas para criar essa chave.

Linux e macOS

Quando uma chave é criada em uma estação de trabalho Linux ou macOS com a ferramenta ssh-keygen, sua chave é salva nos seguintes locais:

  • Arquivo de chave pública: ~/.ssh/[KEY_FILENAME].pub
  • Arquivo de chave particular: ~/.ssh/[KEY_FILENAME]

em que [KEY_FILENAME] é o nome do arquivo da chave SSH, configurada no momento da criação da chave.

Para adicionar ou remover a chave SSH pública dos metadados do projeto ou da instância, formate o arquivo de chave SSH pública.

Windows

Se você criou uma chave na estação de trabalho do Windows usando a ferramenta PuTTYgen, seu arquivo de chave pública e o arquivo de chave particular foram salvos nos locais designados nos seguintes formatos:

  • chave pública: [PUBLIC_KEY_FILENAME]
  • chave particular: [PRIVATE_KEY_FILENAME].ppk

[PUBLIC_KEY_FILENAME] e [PRIVATE_KEY_FILENAME] são os nomes dos arquivos de chaves SSH públicas e privadas, configuradas quando a chave foi salva pela primeira vez.

Um chave SSH pública padrão criada com PuTTYgen terá o seguinte formato:

ssh-rsa [KEY_VALUE] [USERNAME]

em que:

  • [KEY_VALUE] é o valor da chave SSH pública.
  • [USERNAME] é o usuário na instância a quem você aplicou a chave.

Para ver sua chave SSH pública PuTTYgen com a formatação correta:

  1. Execute o PuTTYgen. Se você não tiver PuTTYgen, faça o download e execute o puttygen.exe.

  2. Clique em Carregar para selecionar e abrir o arquivo de chave SSH pública.

  3. Após o carregamento, o valor da chave SSH pública formatado corretamente fica disponível na parte superior da tela do PuTTYgen:

    Captura de tela da chave pública PuTTYgen

Para adicionar ou remover a chave SSH pública dos metadados do projeto ou da instância, formate o arquivo de chave SSH pública.

gcloud

Se você já se conectou a uma instância por meio da ferramenta gcloud, suas chaves já foram geradas e aplicadas ao seu projeto ou instância. Os arquivos de chaves estão disponíveis nos seguintes locais:

  • Linux e macOS:
    • chave pública: $HOME/.ssh/google_compute_engine.pub
    • chave particular: $HOME/.ssh/google_compute_engine
  • Windows:
    • chave pública: C:\Users\[USERNAME]\.ssh\google_compute_engine.pub
    • chave particular: C:\Users\[USERNAME]\.ssh\google_compute_engine

em que [USERNAME] é seu nome de usuário na estação de trabalho local.

Para ver o local em que as chaves SSH públicas foram aplicadas, procure a chave pública nos metadados do projeto e da instância. Para adicionar ou remover a chave SSH pública dos metadados do projeto ou da instância, primeiro formate o arquivo da chave SSH pública.

Como formatar arquivos de chave SSH pública

Para fazer upload das chaves SSH públicas para os metadados do projeto ou da instância, verifique o formato de cada arquivo de chave SSH pública que você pretende adicionar.

Dependendo da ferramenta que será usada para editar os metadados, formate as chaves para trabalhar com o Console do GCP, a ferramenta de linha de comando gcloud ou os métodos de API. Outra opção é alterar as chaves SSH públicas para adicionar, editar ou remover um prazo de validade.

Console

Para verificar o formato de uma chave SSH pública:

  1. Localize e abra o arquivo da chave SSH pública.

  2. Verifique o formato de arquivo da chave SSH pública.

    • Se uma chave SSH pública tem um prazo de validade, ela precisa ter o seguinte formato:

      ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

      em que:

      • [KEY_VALUE] é o valor da chave SSH pública.
      • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.
      • [EXPIRE_TIME] é um valor no formato ISO 8601 (em inglês). Por exemplo: 2018-12-04T20:12:00+0000.
    • Caso contrário, a chave SSH pública deve ter o seguinte formato:

      ssh-rsa [KEY_VALUE] [USERNAME]

      em que:

      • [KEY_VALUE] é o valor da chave SSH pública.
      • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.
  3. Se sua chave não corresponder a um dos formatos acima ou se você quiser adicionar, editar ou remover um prazo de validade, siga as instruções abaixo para formatar sua chave SSH pública. Caso contrário, deixe o arquivo aberto e adicione a chave SSH pública aos metadados do projeto ou da instância.

Para formatar uma chave SSH pública para o console:

  1. Faça uma cópia do arquivo da chave pública. Use essa cópia no Compute Engine e mantenha o arquivo original para as outras configurações do SSH.

  2. Abra a cópia do seu arquivo de chave pública.

  3. Modifique o arquivo da chave pública para que ele tenha o seguinte formato:

    ssh-rsa [KEY_VALUE] [USERNAME]

    em que:

    • [KEY_VALUE] é o valor da chave SSH pública.
    • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.

    Ou então, para que a chave SSH pública tenha um prazo de validade, modifique o arquivo para corresponder ao seguinte formato:

    ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

    em que:

    • [KEY_VALUE] é o valor da chave SSH pública.
    • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.
    • [EXPIRE_TIME] é um valor no formato ISO 8601 (em inglês). Por exemplo: 2018-12-04T20:12:00+0000.
  4. Salve as alterações feitas e deixe o arquivo aberto.

Agora já está tudo pronto para adicionar a chave SSH pública para projetar ou instanciar metadados.

gcloud ou API

Para verificar o formato de uma chave SSH pública:

  1. Localize e abra o arquivo da chave SSH pública.

  2. Verifique o formato de arquivo da chave SSH pública.

    • Se uma chave SSH pública tem um prazo de validade, ela precisa ter o seguinte formato:

      [USERNAME]:ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

      em que:

      • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.
      • [KEY_VALUE] é o valor da chave SSH pública.
      • [EXPIRE_TIME] é um valor no formato ISO 8601 (em inglês). Por exemplo: 2018-12-04T20:12:00+0000.
    • Caso contrário, a chave SSH pública deve ter o seguinte formato:

      [USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME]

      em que:

      • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.
      • [KEY_VALUE] é o valor da chave SSH pública.
  3. Se sua chave não corresponder a um dos formatos acima ou se você quiser adicionar, editar ou remover um prazo de validade, siga as instruções abaixo para formatar sua chave SSH pública. Caso contrário, deixe o arquivo aberto e adicione a chave SSH pública aos metadados do projeto ou da instância.

Para formatar uma chave SSH pública para a ferramenta gcloud ou a API:

  1. Faça uma cópia do arquivo da chave pública. Use essa cópia no Compute Engine e mantenha o arquivo original para as outras configurações do SSH.

  2. Abra a cópia do seu arquivo de chave pública. Por padrão, esse arquivo precisa ter o seguinte formato:

    ssh-rsa [KEY_VALUE] [USERNAME]

    em que:

    • [KEY_VALUE] é o valor da chave SSH pública.
    • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.
  3. Copie o nome de usuário no final do arquivo e cole-o no início do arquivo seguido de dois-pontos. Esse arquivo de chave SSH pública agora terá o seguinte formato:

    [USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME]

    em que:

    • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.
    • [KEY_VALUE] é o valor da chave SSH pública.
  4. Opcionalmente, defina o prazo de validade da chave excluindo o segundo [USERNAME] e anexando google-ssh ao final do arquivo da chave seguido pelos campos userName e expireOn no JSON.

    [USERNAME]:ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

    em que:

    • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.
    • [KEY_VALUE] é o valor da chave SSH pública.
    • [EXPIRE_TIME] é um valor no formato ISO 8601 (em inglês). Por exemplo: 2018-12-04T20:12:00+0000.
  5. Salve as alterações feitas e deixe o arquivo aberto.

Agora já está tudo pronto para adicionar a chave SSH pública para projetar ou instanciar metadados.

Como editar metadados de chave SSH pública

O acesso do usuário a uma instância do Linux por meio de ferramentas de terceiros é determinado pelas chaves SSH públicas disponíveis para a instância. Controle chaves SSH públicas disponíveis para uma instância do Linux editando os metadados, onde são armazenadas suas chaves SSH públicas e informações relacionadas. Há três tipos de metadados para suas chaves SSH públicas:

  • Chaves públicas SSH em todo o projeto: use esses metadados para oferecer acesso geral aos usuários (capacidade de se conectar à maioria das instâncias no projeto).
  • Permitir ou bloquear chaves SSH públicas em todo o projeto: use esse valor de metadados para bloquear ou permitir chaves SSH públicas em todo o projeto em uma instância específica. Por padrão, uma instância aceita todas as chaves SSH públicas de todo o projeto. Bloqueie as chaves SSH públicas em todo o projeto para restringir a instância a apenas usuários com chaves SSH públicas de instância.
  • Chaves SSH públicas de instância: use esses metadados para oferecer acesso especial aos usuários (capacidade de se conectar a uma instância específica no projeto, mesmo que bloqueiem as chaves SSH públicas nele todo).

Como adicionar ou remover chaves SSH públicas em todo o projeto

Use chaves SSH públicas em todo o projeto para oferecer aos usuários acesso geral a uma instância do Linux. Chaves SSH públicas em todo o projeto proporcionam aos usuários acesso a todas as instâncias do Linux em um projeto que permite chaves SSH públicas em todo o projeto. Quando uma instância bloqueia chaves SSH públicas em todo o projeto, o usuário não consegue usar a própria chave para se conectar à instância, a menos que essa chave também seja adicionada aos metadados da instância.

Console

Para adicionar ou remover chaves SSH públicas em todo o projeto a partir do Console do GCP:

  1. No Console do Google Cloud Platform, acesse a página de metadados do projeto.

    Ir para a página de metadados

  2. Em Chaves SSH, clique em Editar.

  3. Modifique as chaves SSH públicas em todo o projeto:

    • Para adicionar uma chave SSH pública, clique em Adicionar item. Uma caixa de texto é aberta.
    • Copie e cole o conteúdo do arquivo de chave SSH pública na caixa de texto.

      Repita esse processo para cada chave SSH pública que você quer adicionar.

    • Para remover uma chave SSH pública, clique no botão de remoção ao lado dela:

      Captura de tela da chave pública PuTTYgen

      Repita esse processo para cada chave SSH pública que você quer remover.

  4. Quando terminar de editar as chaves SSH, clique em Salvar.

gcloud

Veja como adicionar ou remover chaves SSH públicas em todo o projeto com a ferramenta gcloud:

  1. Se já existem chaves SSH públicas em todo o projeto, acesse-as dos metadados:

    1. Consiga os metadados atuais para o projeto:

      gcloud compute project-info describe
      
    2. Na saída, procure o valor de metadados ssh-keys:

      ...
      metadata:
        fingerprint: QCofVTHlggs=
        items:
        - key: ssh-keys
          value: |-
            [USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]
            [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
      ...
      

      em que:

      • [USERNAME_1] e [USERNAME_2] são os nomes de usuário das chaves atuais;
      • [EXISTING_KEY_VALUE_1] e [EXISTING_KEY_VALUE_2] são valores de chave pública já aplicados ao projeto.
    3. Copie as chaves SSH públicas.

  2. Crie e abra um novo arquivo de texto na estação de trabalho local.

  3. No arquivo, crie uma lista de todas as chaves SSH públicas que você quer adicionar ou manter nos metadados do projeto. Se você tiver chaves atuais em todo o projeto, todas as chaves não incluídas na lista serão removidas.

    Por exemplo, a lista de amostra abaixo removerá a chave de [USERNAME_1] porque a chave SSH foi omitida. Ela também manterá a chave SSH de [USERNAME_2] e adicionará a chave SSH de [USERNAME_3] porque as chaves SSH delas estão incluídas na lista.

    [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]
    

    em que:

    • [USERNAME_1], [USERNAME_2] e [USERNAME_3] são os nomes de usuário das chaves SSH públicas;
    • [EXISTING_KEY_VALUE_1] é o valor de chave pública da chave SSH que você quer remover;
    • [EXISTING_KEY_VALUE_2] é o valor de chave pública da chave SSH que você quer manter;
    • [NEW_KEY_VALUE] é o valor de chave pública da chave SSH que você quer adicionar.
  4. Salve e feche o arquivo.

  5. No prompt de comando, use o comando compute project-info add-metadata para definir o valor de ssh-keys em todo o projeto. Inclua a sinalização --metadata-from-file e especifique o caminho para o arquivo de lista.

    gcloud compute project-info add-metadata --metadata-from-file ssh-keys=[LIST_PATH]
    

    em que [LIST_PATH] é o caminho para a lista de chaves SSH públicas.

API

Adicione ou remova chaves públicas em todo projeto usando o método instances.setMetadata.

  1. Use o método projects.get para receber o valor de metadados fingerprint. Para manter as chaves atuais em todo o projeto, consiga os valores de ssh-keys atuais.

    GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]
    
    ...
    "fingerprint": "[FINGERPRINT]",
    "items": [
     {
      "key": "ssh-keys",
      "value": "[USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
     }
    ]
    ...

    em que:

    • [PROJECT_ID] é o ID exclusivo do projeto;
    • [FINGERPRINT] é o código exclusivo dessa configuração específica de metadados, que impede você de substituir alterações simultâneas acidentalmente;
    • [USERNAME_1] e [USERNAME_2] são os nomes de usuário das chaves atuais;
    • [EXISTING_KEY_VALUE_1] e [EXISTING_KEY_VALUE_2] são valores de chave pública já aplicados ao projeto.
  2. Crie uma lista de todas as chaves SSH públicas que você quer adicionar ou manter nos metadados em todo o projeto. Se atualmente você tiver chaves SSH públicas nos metadados em todo o projeto, todas as chaves não incluídas na lista serão removidas.

    Para este exemplo, o arquivo contém um novo valor [KEY_VALUE] seguido de um dos valores de chave atuais que você conseguiu na etapa anterior. O [EXISTING_KEY_VALUE_1] é deixado de fora e removido da instância na próxima etapa. Use caracteres \n para separar cada valor de chave.

    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    

    em que:

    • [USERNAME_1], [USERNAME_2] e [USERNAME_3] são os nomes de usuário das chaves;
    • [EXISTING_KEY_VALUE_1] é o valor de chave pública da chave SSH que você quer remover;
    • [EXISTING_KEY_VALUE_2] é o valor de chave pública da chave SSH que você quer manter;
    • [NEW_KEY_VALUE] é o valor de chave pública da chave SSH que você quer adicionar.
  3. Use o método projects.setcommoninstancemetadata para definir o valor de ssh-keys em todo o projeto. Inclua o valor fingerprint para não modificar as alterações simultâneas feitas nesse valor de metadados.

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/setCommonInstanceMetadata
    
    {
     "items": [
      {
       "key": "ssh-keys",
       "value": "[USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
      }
     ]
     "fingerprint": "[FINGERPRINT]"
    }
    

    em que:

    • [PROJECT_ID] é o ID exclusivo do projeto;
    • [USERNAME_1], [USERNAME_2] e [USERNAME_3] são os nomes de usuário das chaves;
    • [EXISTING_KEY_VALUE_1] é o valor de chave pública da chave SSH que você quer remover;
    • [EXISTING_KEY_VALUE_2] é o valor de chave pública da chave SSH que você quer manter;
    • [NEW_KEY_VALUE] é o valor de chave pública da chave SSH que você quer adicionar.
    • [FINGERPRINT] é a impressão digital adquirida anteriormente com o método projects.get.

Quando terminar, teste suas alterações tentando se conectar à instância do Linux por meio de ferramentas de terceiros.

Se encontrar problemas, verifique os metadados da instância em que você está tentando se conectar. Se os metadados da instância estão configurados para bloquear chaves SSH em todo o projeto ou têm um valor obsoleto sshKeys exclusivo da instância, a instância ignora todas as chaves SSH do projeto. Para aplicar chaves a uma instância em todo o projeto, verifique se ela permite chaves SSH públicas em todo projeto e, quando presente, remova o valor obsoleto sshKeys exclusivo da instância dos metadados da instância.

Como permitir ou bloquear chaves SSH públicas em todo o projeto de uma instância do Linux

Bloqueie as chaves SSH públicas em todo o projeto na instância para que ela ignore essas chaves e use somente as chaves no nível da instância. Isso permitirá que somente usuários cuja chave pública SSH é armazenada em metadados no nível da instância acessem a instância. Para que sua instância use chaves SSH públicas do projeto e próprias, defina os metadados da instância para permitir chaves SSH em todo o projeto. Isso possibilitará que qualquer usuário (que tenha uma chave SSH pública armazenada em metadados em todo o projeto ou na instância) acesse a instância.

Console

Para permitir ou bloquear chaves SSH públicas em todo o projeto no Console do GCP:

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

    Acessar a página "Instâncias de VMs"

  2. Clique no nome da instância que você quer modificar.

  3. Na barra de ferramentas, clique em Editar.

  4. Em Chaves SSH, marque a caixa de seleção Bloquear chaves SSH em todo o projeto.

    • Para impedir que usuários com chaves SSH em todo o projeto se conectem a essa instância, selecione Bloquear chaves SSH em todo o projeto.
    • Para permitir que os usuários com chaves SSH em todo o projeto se conectem a essa instância, limpe as chaves SSH do projeto em bloco.
  5. Quando terminar de editar a configuração de conexão para chaves SSH, clique em Salvar.

gcloud

Para permitir ou bloquear chaves SSH públicas em todo o projeto de uma instância do Linux, adicione o valor de metadados block-project-ssh-keys à instância:

  • Para bloquear chaves SSH públicas em todo o projeto, defina o valor de metadados como TRUE:

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata block-project-ssh-keys=TRUE
    

    em que [INSTANCE_NAME] é o nome da instância em que você quer bloquear as chaves públicas SSH em todo o projeto.

  • Para permitir chaves SSH públicas em todo o projeto, defina o valor de metadados como FALSE:

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata block-project-ssh-keys=FALSE
    

    em que [INSTANCE_NAME] é o nome da instância em que você quer permitir chaves SSH públicas em todo o projeto.

API

Para bloquear ou permitir chaves SSH públicas em todo o projeto de uma instância do Linux:

  • Para bloquear as chaves SSH públicas em todo o projeto, adicione o valor de metadados block-project-ssh-keys à instância e defina-o como TRUE. Esse valor de metadados bloqueia todas as chaves de todo o projeto e impede que funcionem nessa instância para que apenas chaves do nível da instância funcionem.

     POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setMetadata
    
     {
      "items": [
       {
        "key": "block-project-ssh-keys",
        "value": TRUE
       }
      ]
      "fingerprint": "[FINGERPRINT]"
     }
    

    em que:

    • [PROJECT_ID] é o ID exclusivo do projeto;
    • [ZONE] é a zona em que a instância está;
    • [INSTANCE_NAME] é a instância em que você quer bloquear as chaves em todo o projeto;
    • [FINGERPRINT] é o código exclusivo dessa configuração específica de metadados, que impede você de substituir alterações simultâneas acidentalmente;
  • Para permitir chaves SSH públicas em todo o projeto, adicione o valor de metadados de block-project-ssh-keys à instância e defina-o como FALSE. Esse valor de metadados permite que as chaves de todo o projeto (bem como as chaves no nível da instância) funcionem nessa instância.

     POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setMetadata
    
     {
     "items": [
      {
       "key": "block-project-ssh-keys",
       "value": FALSE
      }
     ]
     "fingerprint": "[FINGERPRINT]"
     }
    

    em que:

    • [PROJECT_ID] é o ID exclusivo do projeto;
    • [ZONE] é a zona em que a instância está;
    • [INSTANCE_NAME] é a instância em que você quer permitir chaves de todo o projeto;
    • [FINGERPRINT] é o código exclusivo dessa configuração específica de metadados, que impede você de substituir alterações simultâneas acidentalmente;

Quando terminar, teste suas alterações tentando se conectar à instância do Linux por meio de ferramentas de terceiros.

Como adicionar ou remover chaves SSH públicas no nível da instância

Chaves SSH públicas no nível da instância fornecem aos usuários acesso a uma instância específica do Linux. Usuários com chaves SSH públicas no nível da instância podem acessar uma instância específica do Linux mesmo que ela bloqueie as chaves SSH públicas de todo o projeto.

Console

Para adicionar ou remover chaves SSH públicas no nível da instância no console do GCP:

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

    Acessar a página "Instâncias de VMs"

  2. Clique no nome da instância que você quer modificar.

  3. Na barra de ferramentas, clique em Editar.

  4. Em Chaves SSH, clique em Mostrar e editar. A seção é expandida e mostra todas as chaves SSH públicas no nível da instância.

  5. Modifique as chaves públicas SSH no nível da instância:

    • Para adicionar uma chave SSH pública, clique em Adicionar item. Uma caixa de texto é aberta.
    • Copie e cole o conteúdo do arquivo de chave SSH pública na caixa de texto.

      Repita esse processo para cada chave SSH pública que você quer adicionar.

    • Para remover uma chave SSH pública, clique no botão de remoção ao lado dela:

      Captura de tela da chave pública PuTTYgen

      Repita esse processo para cada chave SSH pública que você quer remover.

  6. Quando terminar de editar as chaves SSH, clique em Salvar.

gcloud

Veja como adicionar ou remover chaves SSH públicas no nível da instância com a ferramenta gcloud:

  1. Se a instância já tiver chaves SSH públicas no nível da instância, solicite essas chaves SSH públicas dos metadados:

    1. Solicite os metadados atuais para a instância:

       gcloud compute instances describe [INSTANCE_NAME]
       

      em que [INSTANCE_NAME] é o nome da instância em que você precisa adicionar ou remover chaves SSH públicas.

    2. Na saída, procure o valor de metadados ssh-keys:

       ...
       metadata:
         fingerprint: QCofVTHlggs=
         items:
         ...
         - key: ssh-keys
           value: |-
             [USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]
             [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
       ...
      

      em que:

      • [USERNAME_1] e [USERNAME_2] são os nomes de usuário das chaves atuais;
      • [EXISTING_KEY_VALUE_1] e [EXISTING_KEY_VALUE_2] são valores de chave pública já aplicados à instância.

    3. Copie as chaves SSH públicas no valor de metadados ssh-keys.

  2. Crie e abra um novo arquivo de texto na estação de trabalho local.

  3. No arquivo, crie uma lista de todas as chaves SSH públicas que você quer adicionar ou manter nos metadados da instância. Se você tiver chaves SSH públicas em metadados no nível da instância, todas as chaves que não forem incluídas em sua lista serão removidas.

    Por exemplo, a lista de amostra abaixo removerá a chave de [USERNAME_1] porque a chave SSH foi omitida. Ela também manterá a chave SSH de [USERNAME_2] e adicionará a chave SSH de [USERNAME_3] porque as respectivas chaves SSH estão incluídas na lista.

    [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]
    

    em que:

    • [USERNAME_1], [USERNAME_2] e [USERNAME_3] são os nomes de usuário das chaves SSH públicas;
    • [EXISTING_KEY_VALUE_1] é o valor de chave pública da chave SSH que você quer remover;
    • [EXISTING_KEY_VALUE_2] é o valor de chave pública da chave SSH que você quer manter;
    • [NEW_KEY_VALUE] é o valor de chave pública da chave SSH que você quer adicionar.
  4. Salve e feche o arquivo.

  5. No prompt de comando, use compute instances add-metadata para definir o valor ssh-key exclusivo da instância. Inclua a sinalização --metadata-from-file e especifique o caminho para a lista de arquivos de chave pública que você criou.

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata-from-file ssh-keys=[LIST_PATH]
    

    em que:

    • [INSTANCE_NAME] é o nome da instância à qual você quer aplicar o arquivo de chave SSH pública;
    • [LIST_PATH] é o caminho para a lista de chaves SSH públicas.

API

Adicione um valor ssh-keys exclusivo da instância aos metadados usando o método instances.setMetadata.

  1. Use o método instances.get para receber o valor dos metadados da fingerprint a ser usado para a solicitação. Para manter suas chaves de nível de instância atuais, busque os valores ssh-keys atuais.

    GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]
    

    O servidor retorna uma resposta parecida com esta:

    ...
    "fingerprint": "[FINGERPRINT]",
    "items": [
     {
      "key": "ssh-keys",
      "value": "[USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
     }
    ]
    ...
    

    em que:

    • [PROJECT_ID] é o ID exclusivo do projeto;
    • [ZONE] é a zona em que a instância está;
    • [INSTANCE_NAME] é a instância em que você quer editar as chaves SSH públicas no nível da instância;
    • [FINGERPRINT] é o código exclusivo dessa configuração específica de metadados, que impede você de substituir alterações simultâneas acidentalmente;
    • [USERNAME_1] e [USERNAME_2] são os nomes de usuário das chaves atuais;
    • [EXISTING_KEY_VALUE_1] e [EXISTING_KEY_VALUE_2] são valores de chave pública já aplicados à instância.
  2. Crie uma lista de todas as chaves SSH públicas que você quer adicionar ou manter nos metadados da instância. Se você tiver chaves SSH públicas em metadados no nível da instância, todas as chaves que não forem incluídas em sua lista serão removidas.

    Para este exemplo, o arquivo contém um novo valor [KEY_VALUE] seguido de um dos valores de chave atuais que você conseguiu na etapa anterior. O [EXISTING_KEY_VALUE_1] é deixado de fora e é removido da instância na próxima etapa. Use caracteres \n para separar cada valor de chave.

    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    

    em que:

    • [USERNAME_1], [USERNAME_2] e [USERNAME_3] são os nomes de usuário das chaves;
    • [EXISTING_KEY_VALUE_1] é o valor de chave pública da chave SSH que você quer remover;
    • [EXISTING_KEY_VALUE_2] é o valor de chave pública da chave SSH que você quer manter;
    • [NEW_KEY_VALUE] é o valor de chave pública da chave SSH que você quer adicionar.
  3. Use o método instances.setMetadata para definir o valor ssh-keys exclusivo da instância. Inclua o valor fingerprint para não modificar as alterações simultâneas feitas nesse valor de metadados.

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setMetadata
    
    {
     "items": [
      {
       "key": "ssh-keys",
       "value": "[USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
      }
     ]
     "fingerprint": "[FINGERPRINT]"
    }
    

    em que:

    • [PROJECT_ID] é o ID exclusivo do projeto;
    • [ZONE] é a zona em que a instância está;
    • [INSTANCE_NAME] é a instância em que você quer editar as chaves SSH públicas no nível da instância;
    • [USERNAME_1], [USERNAME_2] e [USERNAME_3] são os nomes de usuário das chaves;
    • [EXISTING_KEY_VALUE_1] é o valor de chave pública da chave SSH que você quer remover;
    • [EXISTING_KEY_VALUE_2] é o valor de chave pública da chave SSH que você quer manter;
    • [NEW_KEY_VALUE] é o valor de chave pública da chave SSH que você quer adicionar.
    • [FINGERPRINT] é o ID exclusivo dessa configuração específica de metadados, que impede você de substituir alterações simultâneas acidentalmente.

Quando terminar, teste suas alterações tentando se conectar à instância do Linux por meio de ferramentas de terceiros.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine