SSH com chaves de segurança

Neste tutorial, explicamos como se conectar a uma VM usando o OpenSSH com chaves de segurança no Compute Engine.

Com o lançamento do recurso FIDO2/U2F no OpenSSH 8.2 (em inglês), agora é possível ativar pares de chaves SSH compatíveis com hardware por meio de chaves de segurança. As chaves de segurança oferecem um nível mais alto de segurança que pode ajudar a reduzir o impacto dos ataques.

Visão geral

Para gerar chaves SSH vinculadas às chaves de segurança, use o comando ssh-keygen com a sinalização -t ecdsa-sk. Esse comando cria uma chave pública, uma chave privada e um gerenciador de chaves U2F (ou ID de credencial FIDO2). Esses itens são armazenados da seguinte maneira:

  • A chave privada é armazenada no dispositivo de segurança.
  • O gerenciador de chaves e a chave pública são armazenados localmente nos arquivos de chave SSH tradicionais. Esses gerenciadores podem ser criptografados com uma senha longa.

Depois que a chave SSH for gerada, configure sua conta de usuário para usar a chave pública SSH gerada.

Por fim, você pode usar o SSH na VM. Se a VM aceitar uma das chaves ecdsa-sk, o cliente solicitará que você toque na chave de segurança para verificar a conexão.

Objetivos

Neste tutorial, explicamos como concluir estas etapas:

  1. Crie uma VM. No Compute Engine, o Ubuntu 20.04 contém a instalação mais recente do OpenSSH 8.2, que pode ser usada para verificar uma chave de segurança. Neste tutorial, usamos uma VM executada no Ubuntu 20.04.
  2. Em um cliente, instale o OpenSSH 8.2 e gere chaves públicas SSH. Neste tutorial, usamos um cliente executado no Ubuntu 16.04.
  3. Adicione a chave pública SSH gerada à VM.
  4. Conecte-se à VM a partir do cliente usando o OpenSSH com chaves de segurança.

Custos

Neste tutorial, usamos componentes faturáveis do Google Cloud, incluindo o Compute Engine.

Estime seus custos diários ou mensais usando a calculadora de preços.

Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Antes de começar

  1. Faça login na sua conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. No Console do Cloud, na página do seletor de projetos, selecione ou crie um projeto do Cloud.

    Acessar a página do seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud. Saiba como confirmar se a cobrança está ativada para o seu projeto.

  4. Saiba como usar o Cloud Shell para executar comandos da ferramenta de linha de comando gcloud.
  5. No cliente, instale ou atualize para a versão mais recente da ferramenta de linha de comando gcloud.
  6. Opcional: Defina uma região e uma zona padrão.

Configurar a VM

  1. No Console do Google Cloud, acesse o Cloud Shell.

    Acessar o Cloud Shell

  2. Exporte uma variável de ambiente para definir o ID do projeto para comandos futuros:

    export PROJECT_ID='PROJECT_ID'
  3. Crie uma VM host-vm na zona us-west4-c usando a imagem mais recente do Ubuntu 20.04 LTS. Ative também o Login do SO na VM. O Login do SO é usado para gerenciar o acesso à VM.

    Para criar essa VM, execute o seguinte comando:

    gcloud compute instances create host-vm \
       --project $PROJECT_ID \
       --zone us-west4-c \
       --image-family ubuntu-2004-lts \
       --image-project ubuntu-os-cloud \
       --metadata enable-oslogin=true
    
  4. Gere chaves para a VM. Quando você se conecta a uma VM usando o comando gcloud compute ssh, o Compute Engine gera automaticamente um par de chaves RSA SSH para a VM.

    gcloud compute ssh host-vm
    

Configurar a estação de trabalho local (cliente)

A estação de trabalho local ou cliente é o dispositivo usado para se conectar à rede da nuvem.

  1. Na estação de trabalho Linux local, instale o OpenSSH 8.2. Atualmente, a melhor opção é compilar a partir da fonte porque o OpenSSH 8.2 ainda não está disponível para todas as distribuições Linux.

    Por exemplo, em um cliente Ubuntu 16.04, as etapas são:

    1. Instale as dependências.

      sudo apt update
      sudo apt install build-essential
      sudo apt-add-repository ppa:yubico/stable
      sudo apt update
      sudo apt install libz-dev libcurl4-openssl-dev libssl-dev libcbor-dev libfido2-dev
    2. Configure um diretório de trabalho.

      mkdir openssh-8
      cd openssh-8
    3. Faça o download do pacote OpenSSH 8.2.

      wget http://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.2p1.tar.gz
      tar xvzf openssh-8.2p1.tar.gz
      cd openssh-8.2p1
      
    4. Instale o OpenSSH 8.2 com suporte a chaves de segurança.

      ./configure --with-security-key-builtin
      make
      sudo make install
    5. Verifique a instalação.

      ssh -V

      A saída será semelhante a esta.

      OpenSSH_8.2p1, OpenSSL 1.0.2g  1 Mar 2016
    6. Execute o comando ssh-keygen com a sinalização -t ecdsa-sk.

      A saída será semelhante a esta.

      Generating public/private ecdsa-sk key pair.
      You may need to touch your authenticator to authorize key generation.
      Key enrollment failed: device not found
      
  2. Conecte a chave à estação de trabalho local.

  3. Execute o ssh-keygen com a sinalização -t ecdsa-sk. No exemplo a seguir, o par de chaves SSH gerado é nomeado como my-sk-bound-ssh-key.

    ssh-keygen -t ecdsa-sk "my-sk-bound-ssh-key"

    A saída será semelhante a esta.

    Generating public/private ecdsa-sk key pair.
    You may need to touch your authenticator to authorize key generation.Enter file in which to save the key (/home/$USER/.ssh/id_ecdsa_sk):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/$USER/.ssh/id_ecdsa_sk
    Your public key has been saved in /home/$USER/.ssh/id_ecdsa_sk.pub
    The key fingerprint is:
    SHA256:esvq6KPZ5FGttkaYUUeUcf/Oo0hhsRAaB6NKN48kkeo ubuntu-17-02-2020-4432343
    The key's randomart image is:
    +-[ECDSA-SK 256]--+
    |  ..  ++*o.      |
    |  .. ..=oo .     |
    | .o =.... . .    |
    |.. =.+ . . o .   |
    |. . .+o S +   .  |
    | E  o..o . . o   |
    |    o.+ . .   +  |
    |   =.+.+ o . . . |
    |  oo=++.o . .    |
    +----[SHA256]-----+
    
  4. Na estação de trabalho local, instale ou atualize para a versão mais recente da ferramenta de linha de comando gcloud.

  5. Adicione a chave de segurança ao arquivo autorizado na VM. O login do SO está ativado no host-vm para que você possa usar o comando gcloud compute os-login ssh-keys add para associar as chaves SSH públicas.

    gcloud compute os-login ssh-keys add \
        --project $PROJECT_ID \
        --key-file .home/$USER/.ssh/id_ecdsa_sk
    

    Para mais informações, consulte Como adicionar chaves SSH a uma conta de usuário.

  6. Agora é possível se conectar à VM a partir de uma estação de trabalho local usando o OpenSSH com chaves de segurança.

    Para se conectar, execute o comando a seguir:

    gcloud compute ssh host-vm
    
    # Prompt for user to touch security key
    Confirm user presence for key ECDSA-SK SHA256:...
    Welcome to Ubuntu Focal Fossa...
    

    Se a configuração tiver sido concluída, será necessário autenticar o acesso tocando na chave de segurança quando você usar SSH. A VM verifica a chave e concede acesso.

Limpar

Para evitar cobranças dos recursos usados neste tutorial na conta do Google Cloud Platform:

  1. No Console do Google Cloud, acesse o Cloud Shell.

    Acessar o Cloud Shell

  2. Exclua a instância chamada host-vm:

    gcloud compute instances delete host-vm
       --project $PROJECT_ID \
       --zone us-west4-c

A seguir