Como se conectar a instâncias usando métodos avançados

O jeito mais fácil de se conectar a instâncias do Linux e do Windows Server é usar as ferramentas do Compute Engine. No entanto, em algumas situações você pode querer gerenciar suas próprias credenciais, se conectar a instâncias por meio de caminhos de conexão alternativos ou se conectar a instâncias com ferramentas de terceiros.

Neste guia, mostramos como realizar as seguintes tarefas:

Antes de começar

Como fornecer chaves SSH públicas para instâncias

Para se conectar a uma instância de VM do Linux, você precisa da sua própria chave SSH, que consiste em um arquivo de chave SSH particular e exclusiva e em outro arquivo correspondente de chave SSH pública. As chaves SSH são criadas e gerenciadas automaticamente sempre que você se conecta usando as ferramentas do Compute Engine. No entanto, para se conectar com ferramentas de terceiros, você precisa fornecer sua chave SSH pública para a instância com uma das seguintes opções:

  • Use o Login do SO, que permite manter a identidade consistente do usuário do Linux e evitar o fornecimento e o gerenciamento de chaves SSH nas instâncias da VM.
  • Use papéis do IAM para gerenciar o acesso à instância, o que permite que você forneça sua chave SSH pública à instância por meio da sua Conta do Google ou de uma conta de usuário gerenciada.
  • Adicione as chaves SSH aos metadados do projeto ou de uma instância específica.
  • Peça para outro usuário configurar manualmente sua chave SSH pública para você na instância.

Depois de aplicar sua chave SSH pública às instâncias a que você quer se conectar, use sua chave SSH privada para conseguir acesso à instância.

Como se conectar usando ferramentas de terceiros

Para acessar uma instância, você pode apresentar seu arquivo de chave SSH particular por meio de uma ferramenta de terceiros. Se você estiver em uma estação de trabalho Linux ou macOS, use o comando ssh para se conectar. No entanto, se você estiver em uma estação de trabalho anterior ao Windows 10, não há nenhuma ferramenta incluída para apresentar o arquivo de chave SSH privada. Será preciso fazer o download de uma ferramenta externa, como o PuTTY. Nos Chromebooks ou nos sistemas operacionais com o Chrome instalado, use o app Secure Shell para estabelecer conexões SSH.

SSH

Para se conectar a uma instância usando o comando ssh:

  1. Forneça sua chave SSH pública para uma instância usando uma das opções disponíveis.

  2. No console, encontre o endereço IP externo da instância a que você quer se conectar. Acesse a lista das suas instâncias.

    Acessar a página "Instâncias"

  3. Em um terminal, use o comando ssh e o arquivo da chave SSH privada para se conectar à instância. Especifique o nome de usuário e o endereço IP externo da instância a que você quer se conectar.

    ssh -i [PATH_TO_PRIVATE_KEY] [USERNAME]@[EXTERNAL_IP_ADDRESS]

    em que:

    • [PATH_TO_PRIVATE_KEY] é o caminho para o arquivo da chave SSH privada;
    • [USERNAME] é o nome do usuário que se conecta à instância. O nome de usuário da chave SSH pública é especificado quando a chave é criada. É possível se conectar à instância como esse usuário se ela tiver uma chave SSH pública válida para ele e você tiver a chave SSH privada correspondente;
    • [EXTERNAL_IP_ADDRESS] é o endereço IP externo da instância.

    Se você conseguir se conectar, use o terminal para executar comandos na instância. Quando terminar, execute exit para se desconectar da instância.

App SSH (Chrome OS)

Se não for possível usar o SSH do navegador ou o comando gcloud compute ssh, use o SSH nas instâncias por meio do app Secure Shell para navegador Chrome OS ou Chrome.

Instale o app Secure Shell no navegador Chrome ou no Chromebook e use-o para se conectar às instâncias:

  1. Instale o app Secure Shell no Chromebook ou no navegador Chrome.
  2. Identifique um arquivo de chave SSH pública atual que você queira usar. Se precisar gerar um novo par de chaves, abra o Cloud Shell e use o comando ssh-keygen para criar o novo par. Faça o download desse par de chaves para a estação de trabalho local por meio do Cloud Shell.

  3. Forneça sua chave SSH pública para uma instância usando uma das opções disponíveis.

  4. No Console do Google Cloud Platform, encontre o endereço IP externo da instância a que você quer se conectar. Acesse a lista de instâncias.

    Acessar a página "Instâncias"

  5. Abra o app Secure Shell em uma guia do navegador Chrome.

  6. Digite seu nome de usuário e o endereço IP externo da instância no seguinte formato:

       [USERNAME]@[EXTERNAL_IP_ADDRESS]

    em que:

    • [USERNAME] é o nome do usuário que se conecta à instância. O nome de usuário da chave SSH é especificado quando a chave é criada. Será possível se conectar à instância como esse usuário se ela tiver uma chave SSH pública válida para ele e você tiver a chave SSH privada correspondente;
    • [EXTERNAL_IP_ADDRESS] é o endereço IP externo da instância a que você quer se conectar.
  7. No campo Identidade, selecione o arquivo de chave privada que você quer usar para se conectar à instância. Se necessário, clique em Importar para selecionar um arquivo de chave privada da estação de trabalho local.

  8. Clique em Conectar para se conectar à instância.

    Se a conexão for estabelecida, use o terminal para executar comandos na instância. Quando terminar, execute exit para se desconectar da instância.

PuTTY (Windows)

Para se conectar a uma instância usando PuTTY:

  1. Forneça sua chave SSH pública para uma instância usando uma das opções disponíveis.

  2. Faça o download do putty.exe.

  3. Execute a ferramenta PuTTY. Neste exemplo, basta executar o arquivo putty.exe do download que você fez. Defina as configurações de conexão na janela exibida.

  4. No Console do Google Cloud Platform, encontre o endereço IP externo da instância a que você quer se conectar. Acesse a lista das suas instâncias.

    Acessar a página "Instâncias"

  5. Na ferramenta PuTTY, especifique no campo Host name o nome de usuário e o endereço IP externo da instância a que você quer se conectar. No exemplo abaixo, o nome de usuário é jane_doe e o endereço IP externo é 203.0.113.2.

    Como configurar o campo Host Name com jane_doe@203.0.113.2

    Especifique seu nome de usuário e o endereço IP externo da instância no seguinte formato:

       [USERNAME]@[EXTERNAL_IP_ADDRESS]

    em que:

    • [USERNAME] é o nome do usuário que se conecta à instância. O nome de usuário da chave SSH é especificado quando a chave é criada. É possível se conectar à instância como esse usuário se ela tiver uma chave SSH pública válida para ele e você tiver a chave SSH privada correspondente;
    • [EXTERNAL_IP_ADDRESS] é o endereço IP externo da instância a que você quer se conectar.
  6. No lado esquerdo da janela do PuTTY, navegue até Connection > SSH > Auth.

  7. Preencha o campo Private key file for authentication com o caminho para o arquivo da chave privada.

    Como definir o caminho do arquivo my-ssh-key.ppk no campo do arquivo da chave particular.

  8. Se, a partir desta, você planeja se conectar a outras instâncias na rede do Cloud Platform, habilite Allow agent forwarding. Por exemplo, é possível permitir que o encaminhamento do agente direcione sua chave SSH privada a uma instância do host Bastion e se conecte a instâncias que não tenham endereços IP externos.

    Como permitir o encaminhamento do agente na instância a que você está se conectando.

  9. Clique em Open para abrir o terminal com uma conexão à sua instância.

    Se a conexão for estabelecida, use o terminal para executar comandos na instância. Quando terminar, execute exit para se desconectar da instância.

Como se conectar a instâncias que não têm endereços IP externos

É possível criar instâncias sem endereços IP externos para isolá-las das redes externas. Essas instâncias têm apenas endereços IP internos em uma rede de nuvem privada virtual (VPC, na sigla em inglês) do Google Cloud Platform. Ainda é possível se conectar a elas usando um dos seguintes métodos:

Como se conectar por VPN

Se você tiver uma rede privada virtual (VPN) que se conecta a partir da rede local à VPC do Google Cloud Platform, será possível se conectar diretamente aos endereços IP internos das suas instâncias.

É possível usar a ferramenta de linha de comando gcloud, o SSH no Linux e no macOS ou o PuTTY no Windows para se conectar a instâncias que não tenham endereços IP externos.

gcloud

  1. Conecte-se a uma instância sem um endereço IP externo usando o comando gcloud compute ssh com a sinalização --internal-ip.

    gcloud compute ssh [INTERNAL_INSTANCE_NAME] --internal-ip
    

    [INTERNAL_INSTANCE_NAME] é o nome da instância a que você quer se conectar.

Se você conseguir se conectar, use o terminal para executar comandos na instância interna. Quando você terminar, execute exit para encerrar as conexões e voltar para sua estação de trabalho local.

SSH

Para se conectar a uma instância sem um endereço IP externo a partir de estações de trabalho Linux ou macOS:

  1. Forneça sua chave SSH pública para uma instância usando uma das opções disponíveis.

  2. Encontre o endereço IP interno da instância a que você quer se conectar. Ele está localizado na coluna IP interno da página "Instâncias".

    Acessar a página "Instâncias"

  3. Conecte-se a uma instância sem um endereço IP externo usando o SSH.

    $ ssh -i ~/.ssh/[PRIVATE_KEY] [USERNAME]@[INTERNAL_INSTANCE_IP_ADDRESS]

    em que:

    • [PRIVATE_KEY] é o nome do arquivo da chave privada;
    • [USERNAME] é o nome anexado à chave SSH;
    • [INTERNAL_INSTANCE_IP_ADDRESS] é o endereço IP interno da instância a que você quer se conectar.

Se você conseguir se conectar, use o terminal para executar comandos na instância que não tem endereço IP externo. Quando você terminar, execute o comando exit para encerrar as conexões e voltar para sua estação de trabalho local.

PuTTY

Para se conectar a uma instância sem um endereço IP externo a partir das estações de trabalho Windows:

  1. Forneça sua chave SSH pública para uma instância usando uma das opções disponíveis.

  2. Encontre o endereço IP interno da instância a que você quer se conectar. Ele está localizado na coluna IP interno da página "Instâncias".

    Acessar a página "Instâncias"

  3. Conecte-se à instância usando o PuTTY. Depois que fizer isso, especifique o endereço IP interno da instância a que você quer se conectar.

    Se você conseguir se conectar, use o terminal para executar comandos na instância que não tem endereço IP externo. Quando você terminar, execute o comando exit para encerrar as conexões e voltar para sua estação de trabalho local.

Como se conectar usando um Bastion Host

Uma instância do Bastion Host tem um endereço IP externo e um interno. Se você precisa acessar instâncias na rede interna que não têm endereços IP externos, é possível se conectar a um Bastion Host e depois a instâncias internas a partir dele. Você também pode se conectar por meio da instância do Bastion Host a instâncias em outras redes VPC com peering.

Se você se conectar a outras instâncias a partir de uma instância do Bastion Host, uma chave SSH particular ainda será necessária. Você precisa encaminhar a chave particular para a instância do host Bastion. Isso não é necessário se ela tiver a ferramenta de linha de comando gcloud instalada e configurada para gerenciar as chaves particulares para você.

É possível usar a ferramenta de linha de comando gcloud, o SSH no Linux e no macOS ou o PuTTY no Windows para se conectar a instâncias que não tenham endereços IP externos. Nestes exemplos, a instância do Bastion Host precisa ter o sistema operacional Linux.

gcloud

Se você usar a ferramenta de linha de comando gcloud, poderá se conectar a instâncias que não tenham endereços IP externos sem encaminhar suas chaves SSH privadas para o Bastion Host. Para fazer isso, a gcloud precisa estar instalado na estação de trabalho local e na instância do Bastion Host. Se for necessário encaminhar suas chaves privadas da estação de trabalho local para a instância do Bastion Host, siga as instruções do SSH ou do PuTTY.

Para usar a ferramenta de linha de comando gcloud e se conectar a uma instância que não tenha um endereço IP externo:

  1. Defina um escopo de acesso de leitura/gravação da API Compute Engine para a conta de serviço na instância do Bastion Host.

    Dica: use --scopes compute-rw.

  2. Conceda as permissões do IAM necessárias para permitir que o Bastion Host acesse a chave SSH pública. Escolha uma das seguintes opções:

    A conta de serviço no Bastion Host agora poderá aplicar a chave SSH pública.

  3. Conecte-se à instância do Bastion Host do Linux.

    gcloud compute ssh [EXTERNAL_INSTANCE_NAME]
    

    [EXTERNAL_INSTANCE_NAME] é o nome da instância do Bastion Host que você está usando para ter acesso à rede interna.

  4. Na instância do Bastion Host do Linux, use o comando gcloud beta compute ssh com a sinalização --internal-ip para conectar-se a instâncias usando os respectivos endereços IP internos:

    gcloud beta compute ssh [INTERNAL_INSTANCE_NAME] --internal-ip
    

    [INTERNAL_INSTANCE_NAME] é o nome da instância a que você quer se conectar.

Se você conseguir se conectar, use o terminal para executar comandos na instância interna. Quando terminar, você poderá usar o comando exit para fechar cada conexão de instância e retornar à sua estação de trabalho local.

SSH

Para se conectar a uma instância sem um endereço IP externo a partir de estações de trabalho Linux ou macOS:

  1. Forneça sua chave SSH pública usando uma das opções disponíveis. Certifique-se de fornecer essa chave SSH pública para a instância do Bastion Host do Linux e a instância sem endereço IP externo.

  2. Encontre o endereço IP externo da instância do Bastion Host do Linux. Localize também o endereço IP interno da instância interna a que você quer se conectar. Você encontra os endereços nas colunas IP externo e IP interno da página "Instâncias".

    Acessar a página "Instâncias"

  3. Conecte-se à instância do Bastion Host do Linux usando ssh.

    Conecte-se à instância do host interno por meio da instância do Bastion Host do Linux e do proxy.

    $ ssh -i ~/.ssh/[PRIVATE_KEY] -o ProxyCommand="ssh -W %h:%p -i ~/.ssh/[PRIVATE_KEY] [USERNAME]@[BASTION_HOST_EXTERNAL_IP_ADDRESS]" [USERNAME]@[INTERNAL_INSTANCE_IP_ADDRESS]

    em que:

    • [PRIVATE_KEY] é o nome do arquivo da chave privada SSH;
    • [USERNAME] é o nome de usuário anexado à sua SSH;
    • [BASTION_HOST_EXTERNAL_IP_ADDRESS] é o endereço IP externo da instância do Bastion Host que você está usando para ter acesso à rede interna;
    • [INTERNAL_INSTANCE_IP_ADDRESS] é o endereço IP interno da instância a que você quer se conectar.

    Também é possível se conectar à instância do Bastion Host e encaminhar as chaves particulares com o comando gcloud compute ssh dentro do comando ProxyCommand. Essa opção permite que você se conecte à instância do Bastion Host usando a ferramenta de linha de comando gcloud. Assim, você não precisa adicionar a chave pública ao Bastion Host.

    ssh -i ~/.ssh/[PRIVATE_KEY] -o ProxyCommand="gcloud compute ssh [BASTION_HOST_INSTANCE_NAME] -- -W %h:%p" [USERNAME]@[INTERNAL_INSTANCE_IP_ADDRESS]
    

    em que:

    • [PRIVATE_KEY] é o nome do arquivo da chave privada SSH;
    • [USERNAME] é o nome anexado à chave SSH;
    • [BASTION_HOST_INSTANCE_NAME] é o nome da instância do Bastion Host que você está usando para ter acesso à rede interna;
    • [INTERNAL_INSTANCE_IP_ADDRESS] é o endereço IP interno da instância a que você quer se conectar.

Se você conseguir se conectar, use o terminal para executar comandos na instância que não tem endereço IP externo.Quando terminar, você poderá usar o comando exit para fechar cada conexão de instância e retornar à sua estação de trabalho local.

PuTTY

Para se conectar a uma instância sem um endereço IP externo a partir das estações de trabalho Windows:

  1. Forneça sua chave SSH pública usando uma das opções disponíveis. Certifique-se de fornecer essa chave SSH pública para a instância do Bastion Host do Linux e a instância sem endereço IP externo.

  2. Encontre o endereço IP externo da instância do Bastion Host do Linux. Localize também o endereço IP interno da instância interna a que você quer se conectar. Você encontra os endereços nas colunas IP externo e IP interno da página "Instâncias".

    Acessar a página "Instâncias"

  3. Conecte-se à instância do Bastion Host do Linux usando o PuTTY. Ative a configuração Allow agent forwarding para transmitir a chave SSH privada ao Bastion Host.

  4. A partir da instância do Bastion Host do Linux, conecte-se à instância que não tem um endereço IP externo usando o SSH:

    $ ssh [USERNAME]@[INTERNAL_IP_ADDRESS]
    

    em que:

    • [USERNAME] é o nome anexado à chave SSH;
    • [INTERNAL_IP_ADDRESS] é o endereço IP interno da instância a que você quer se conectar.

    Se você conseguir se conectar, use o terminal para executar comandos na instância que não tem endereço IP externo. Quando terminar, use o comando exit para fechar cada conexão de instância e retornar à estação de trabalho local.

Como se conectar a instâncias como usuário root

Por padrão, as imagens públicas e os sistemas operacionais mais comuns não permitem login como root usando SSH. As instâncias permitem conectar como root usando SSH apenas se você mesmo as configurar para funcionar dessa maneira.

Como prática recomendada, o arquivo de configuração SSH /etc/ssh/sshd_config tem o parâmetro PermitRootLogin definido como no. Por causa desse parâmetro, não é possível se conectar a uma instância como usuário raiz, mesmo que você especifique uma chave SSH para root nos metadados do projeto ou da instância. Se um usuário precisar de permissões de root, ele poderá recebê-las com a execução de comandos por meio do sudo.

Se você configurou uma instância para permitir o SSH como usuário raiz e definir uma chave SSH para ele nessa instância, será possível se conectar como root usando o comando gcloud compute ssh com root@ especificado antes do nome da instância:

gcloud compute ssh --project [PROJECT_ID] --zone [ZONE] root@[INSTANCE_NAME]

Em que:

  • [PROJECT_ID] é o código do projeto que contém a instância.
  • [ZONE] é o nome da zona em que a instância está localizada.
  • [INSTANCE_NAME] é o nome da instância.

Como se conectar a instâncias do Windows pelo terminal do PowerShell

Se você tem uma estação de trabalho do Windows com o PowerShell, pode se conectar a instâncias do Windows Server por meio de uma sessão remota do PowerShell. Esse processo é similar a se conectar a uma instância do Linux com SSH.

  1. Crie ou redefina sua senha do Windows se ainda não criou um nome de usuário e uma senha na instância remota.

  2. Adicione uma regra de firewall que abra a porta 5986 na rede VPC do Cloud Platform em que está localizada a instância do Windows Server.

  3. Na sua estação de trabalho local, abra o terminal do PowerShell.

  4. Também é possível inicializar uma variável para manter suas credenciais de usuário e não ter de digitá-las todas as vezes que você se conectar à instância. Se pular esta etapa, você receberá uma solicitação de nome de usuário e senha depois.

    PS C:\> $credentials = Get-Credential
    
  5. Use o comando Enter-PSSession para iniciar uma sessão remota do PowerShell e inclua as sinalizações para usar SSL e pular as verificações de credenciais.

    PS C:\> Enter-PSSession -ComputerName [IP_ADDRESS] -UseSSL -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck) -Credential $credentials
    

    [IP_ADDRESS] é o endereço IP externo, o nome DNS ou o nome do computador Windows da instância a que você quer se conectar.

Se a conexão for estabelecida, o prompt de comando será alterado para incluir o endereço IP da instância remota do Windows. Use o terminal para executar comandos do PowerShell na instância remota do Windows Server.

Como alternativa ao comando Enter-PSSession, execute Invoke-Command com a sinalização -ScriptBlock para executar comandos do PowerShell na instância remota sem estabelecer uma sessão interativa.

PS C:\> Invoke-Command -ComputerName [IP_ADDRESS] -ScriptBlock { [SCRIPT] } -UseSSL -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck) -Credential $credentials

em que:

  • [IP_ADDRESS] é o endereço IP, nome do DNS ou nome do computador Windows para a instância a que você quer se conectar;
  • [SCRIPT] representa um ou mais comandos a executar na instância remota. Por exemplo, especifique Get-EventLog -log "Windows PowerShell" para ver uma lista de eventos de registro.

Como se conectar manualmente entre instâncias como uma conta de serviço

Em algumas situações, convém se conectar a instâncias e executar comandos como uma conta de serviço associada a essas instâncias. Por exemplo, use o comando gcloud compute ssh para SSH de uma instância para outra com as credenciais de SSH da conta de serviço, e não com as suas credenciais de SSH. A ferramenta de linha de comando gcloud gera automaticamente um par de chaves SSH e o associa à conta de serviço na instância. Depois de se conectar à outra instância como a conta de serviço, execute comandos adicionais do gcloud usando as permissões do IAM da conta de serviço.

Neste exemplo, suponha que você tenha o seguinte ambiente:

  • Instância A:
    • A instância A tem uma conta de serviço associada.
    • A conta de serviço associada à instância A tem os papéis de login do SO necessários configurados no nível do projeto ou especificamente para o recurso da instância B.
    • A conta de serviço tem o escopo de toda a plataforma https://www.googleapis.com/auth/cloud-platform na instância A.
  • Instância B:
    • A instância B é executada na mesma rede interna da instância A ou em uma rede com regras de firewall que permitem conexões SSH da instância A.
    • O recurso de login do SO está ativado no projeto ou especificamente na instância B.
  • Sua conta de usuário pessoal:
    • A conta tem o papel roles/iam.serviceAccountUser para a conta de serviço associada à instância A.
    • A conta tem acesso SSH especificamente à instância A.
    • A conta não tem acesso à instância B. A conta de serviço é a única com os papéis de login do SO necessários para conexão com a instância B.

Conecte-se à instância A e execute comandos como essa conta de serviço. Para essa etapa, é necessário que você tenha o papel roles/iam.serviceAccountUser para essa conta de serviço:

  1. Conecte-se à instância A como o usuário com o papel roles/iam.serviceAccountUser. Por exemplo, use a ferramenta de linha de comando gcloud para estabelecer esta primeira conexão SSH:

    my-username@localworkstation:~$ gcloud compute ssh instance-a --project my-project --zone us-east1-d
    
  2. Após estabelecer a conexão SSH com a instância A, execute comandos como se fosse a conta de serviço, desde que você tenha o papel roles/iam.serviceAccountUser. Neste exemplo, execute a ferramenta de linha de comando gcloud na instância A para criar uma conexão SSH em cadeia com a instância B. A ferramenta de linha de comando gcloud identifica que a instância B está ativada para usar o login do SO e também identifica que a conta de serviço tem os papéis do IAM necessários para a conexão SSH com a instância B.

    my-username@instance-a:~$ gcloud compute ssh instance-b --project my-project --zone us-east1-d
    
    WARNING: Using OS Login user [sa_113491385848438711199] instead of default user [my-username]
    Linux instance-b 4.9.0-8-amd64 #1 SMP Debian 4.9.110-3+deb9u6 (2018-10-08) x86_64
    ⋮
    
    
  3. Agora você está conectado à instância B como a conta de serviço, e é possível executar comandos como essa conta.

    sa_113491385848438711199@instance-b:~$ uname -a
    
    Linux instance-b 4.9.0-8-amd64 #1 SMP Debian 4.9.110-3+deb9u6 (2018-10-08) x86_64 GNU/Linux
    
    

A seguir

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

Enviar comentários sobre…

Documentação do Compute Engine