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


Os melhores métodos de conexão SSH, em geral, estão descritos na página Como se conectar a instâncias. No entanto, quando é necessário gerenciar suas próprias credenciais, usar ferramentas de terceiros ou se conectar através de caminhos de conexão alternativos, os métodos avançados a seguir podem atender melhor às suas necessidades em comparação aos métodos padrão.

Há vários métodos avançados para se conectar a instâncias do Linux e do Windows Server:

Antes de começar

Como fornecer chaves SSH públicas para instâncias

Normalmente, o Compute Engine cria e gerencia chaves SSH sempre que você se conecta usando os métodos descritos em Como se conectar a instâncias.

No entanto, se você precisar usar suas próprias chaves SSH (por exemplo, ao usar ferramentas de terceiros para se conectar), será preciso gerar o próprio par de chaves SSH e fornecer o arquivo de chave SSH pública à instância antes de poder se conectar.

Se você não souber como gerar sua própria chave SSH e como localizar o arquivo de chave SSH pública, consulte Como criar uma nova chave SSH e Como localizar uma chave SSH.

Para fornecer sua chave SSH à instância, use um dos métodos a seguir:

  • (Recomendado) Ative o Login do SO. O Login do SO usa papéis do IAM para fornecer a chave SSH pública à instância por meio da sua Conta do Google ou de uma conta de usuário gerenciada. Para instruções, consulte Como configurar o Login do SO.

    Ao configurar o Login do SO, conclua a etapa para adicionar chaves SSH a uma conta de usuário. Nesta etapa, você pode adicionar sua chave pública à conta de usuário que quiser usar para se conectar à VM.

    Para saber mais sobre os benefícios de usar esse recurso, consulte Login do SO.

  • (Não recomendado) Adicione e remova manualmente chaves SSH editando metadados de instância ou projeto. Consulte Como gerenciar chaves SSH em metadados. Esse método inclui complexidades e riscos desnecessários e não é recomendado, a menos que o método de Login do SO acima não funcione para você. Consulte Riscos do gerenciamento manual de chaves.

  • Caso sua instância seja gerenciada por outra pessoa que já tenha acesso (como um administrador de sistemas em sua organização), também é possível fornecer seu arquivo de chave SSH pública a ela e solicitar que ela a configure manualmente para você. Geralmente, isso envolve a conexão com a instância, a cópia do arquivo de chave pública no diretório principal da instância e a alteração das permissões do arquivo, mas isso depende da maneira como a organização gerencia as instâncias.

Como se conectar usando ferramentas de terceiros

Siga as etapas apropriadas para o sistema operacional em sua estação de trabalho local para se conectar:

Linux e macOS

Para se conectar usando SSH em uma máquina Linux ou macOS, use o comando ssh integrado em um terminal local:

  1. Se você ainda não tiver feito isso, forneça sua chave SSH pública para uma instância usando uma das opções disponíveis. Caso contrário, não será possível prosseguir.

  2. No Console do Google Cloud, acesse a página instâncias de VM e encontre o endereço IP externo da instância a que você quer se conectar.

    Acessar a página Instâncias de VM

  3. Em um terminal local, use o comando ssh com seu arquivo de chave SSH privada, o nome de usuário e o endereço IP externo da instância a ser conectada. Exemplo:

    ssh -i path-to-private-key username@external-ip

    Substitua o seguinte:

    Depois de se conectar, execute comandos em sua instância usando este terminal. Quando terminar, desconecte-se da instância executando o comando exit.

Windows (PuTTY)

O Windows não inclui um cliente SSH integrado, o que significa que é preciso fazer o download e instalar um cliente de terceiros. As instruções a seguir mostram como se conectar usando o PuTTY.

Para se conectar a uma instância do Windows usando o PuTTY (em inglês), siga estas etapas:

  1. Se você ainda não tiver feito isso, forneça sua chave SSH pública para uma instância usando uma das opções disponíveis. Caso contrário, não será possível prosseguir.

  2. No Console do Google Cloud, acesse a página instâncias de VM e encontre o endereço IP externo da instância a que você quer se conectar. Mantenha o endereço IP externo disponível para as próximas etapas.

    Acessar a página Instâncias de VM

  3. Caso ainda não tenha feito isso, faça o download do arquivo putty.exe.

  4. Abra o PuTTY iniciando putty.exe. Uma janela de configuração de conexão é aberta.

  5. No campo Nome do host na página de configuração de conexão, insira o nome de usuário associado à chave SSH e o endereço IP externo da instância a que você quer se conectar no formato a seguir:

    username@external-ip

    Substitua:

    • username: o nome do usuário que se conecta à instância. Este será o nome de usuário que você especificou quando criou a chave SSH.
    • external-ip: o endereço IP externo da instância à que você quer se conectar.

    Por exemplo, veja a captura de tela a seguir:

    Como configurar o campo

  6. No menu Category à esquerda, navegue até Connection > SSH > Auth.

  7. No campo Private key file for authentication, procure o local do seu arquivo de chave privada.

    Por exemplo, veja a captura de tela a seguir:

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

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

Depois de se conectar, execute comandos em sua instância usando este terminal. Quando terminar, desconecte-se da instância executando o comando exit.

Chrome OS (aplicativo SSH)

Os Chromebooks ou sistemas operacionais com o Chrome instalado são compatíveis com o Secure Shell como cliente SSH. Para se conectar a instâncias pelo aplicativo Secure Shell, siga as etapas a seguir:

  1. Se você ainda não tiver feito isso, forneça sua chave SSH pública para uma instância usando uma das opções disponíveis. Caso contrário, não será possível prosseguir.

  2. Instale o Secure Shell no Chromebook ou no navegador Chrome, caso ainda não tenha feito isso.

  3. No Console do Google Cloud, acesse a página instâncias de VM e encontre o endereço IP externo da instância a que você quer se conectar. Mantenha o endereço IP externo disponível para as próximas etapas.

    Acessar a página Instâncias de VM

  4. Abra o aplicativo Secure Shell em uma guia do navegador Chrome. Você pode acessar os aplicativos do Google Chrome digitando chrome://apps na barra de endereço.

  5. Insira o nome de usuário associado ao par de chaves SSH e o endereço IP externo da instância à qual você quer se conectar no formato a seguir:

     username@external-ip
     

    Substitua:

    • username: o nome do usuário que está se conectando à instância. Este será o nome de usuário que você especificou quando criou a chave SSH.
    • external-ip: o endereço IP externo da instância à que você quer se conectar.
  6. No campo Identidade, selecione o arquivo de chave SSH 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.

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

Depois de se conectar, execute comandos em sua instância usando este terminal. Quando terminar, desconecte-se da instância executando o comando exit.

Outras opções de SSH

Além das opções detalhadas acima, veja abaixo outras opções para se conectar a uma instância usando SSH:

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

Se você tiver instâncias isoladas sem um endereço IP externo, ainda será possível se conectar a elas usando os respectivos endereços IP internos em uma rede VPC do Google Cloud. Por exemplo, é possível se conectar a instâncias de VM isoladas intencionalmente de redes externas usando os seguintes métodos:

Como se conectar por VPN

Para usar uma Rede privada virtual (VPN, na sigla em inglês) para se conectar a uma instância sem um endereço IP externo:

  • Use um computador que alcance a instância da VM por meio de um túnel do Cloud VPN.

    Por exemplo, é possível ter uma VPN compartilhada pela rede local com a VPC do Google Cloud. Nesse caso, conecte-se à instância usando a ferramenta de linha de comando gcloud, o SSH no Linux e no macOS ou clientes SSH de terceiros, como o PuTTY no Windows.

Consulte as guias a seguir para saber mais:

gcloud

Para se conectar a uma instância sem um endereço IP externo, use o comando gcloud compute ssh com a sinalização --internal-ip.

  1. No Console do Google Cloud, acesse a página instâncias de VM e encontre o endereço IP interno da instância à que você quer se conectar.

    Acessar a página Instâncias de VM

  2. Conecte-se à instância.

    gcloud compute ssh internal-instance-name \
    --zone zone \
    --internal-ip
    

    Substitua:

    • internal-instance-name: o nome da instância a que você quer se conectar.
    • zone: o nome da zona em que a instância está localizada.
  3. Depois de se conectar, execute comandos em sua instância usando este terminal. Quando terminar, desconecte-se da instância executando o comando exit.

Linux e macOS

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

  1. Forneça sua chave SSH pública para uma instância usando uma das opções disponíveis. Caso contrário, não será possível prosseguir.

  2. Na sua máquina local, inicie ssh-agent para que as chaves SSH sejam gerenciadas para você:

    $ eval ssh-agent $SHELL
    
  3. Execute o comando ssh-add para carregar a chave SSH privada do seu computador local no agente e a utilize na autenticação de todos os comandos SSH. Substitua private-key pelo nome do arquivo da sua chave privada.

    $ ssh-add ~/.ssh/private-key
    
  4. No Console do Google Cloud, acesse a página instâncias de VM e encontre o endereço IP interno da instância à que você quer se conectar.

    Acessar a página Instâncias de VM

  5. Em um terminal local, use o comando ssh junto com o nome de usuário associado à sua chave SSH privada e o endereço IP interno da instância a ser conectada. Por exemplo:

    $ ssh username@internal-instance-ip-address

    Substitua o seguinte:

    • username: o nome do usuário que está se conectando à instância. Este será o nome de usuário que você especificou quando criou a chave SSH.
    • internal-instance-ip-address: o endereço IP interno da instância à qual você quer se conectar.

Depois de se conectar, execute comandos em sua instância usando este terminal. Quando terminar, desconecte-se da instância executando o comando exit.

Windows (PuTTY)

Para se conectar a uma instância sem um endereço IP externo pelas estações de trabalho Windows, siga estas etapas:

  1. Se você ainda não tiver feito isso, forneça sua chave SSH pública para uma instância usando uma das opções disponíveis. Caso contrário, não será possível prosseguir.

  2. No Console do Google Cloud, acesse a página instâncias de VM e encontre o endereço IP interno da instância à que você quer se conectar.

    Acessar a página Instâncias de VM

  3. Siga as etapas acima para se conectar a uma instância usando o PuTTY do Windows, mas com a seguinte alteração:

    • Quando for necessário especificar um endereço IP externo, especifique o endereço interno da instância à que você quer se conectar.

Depois de se conectar, execute comandos em sua instância usando este terminal. Quando terminar, desconecte-se da instância executando o comando exit.

Como se conectar usando um Bastion Host

Outro método de conexão a uma instância que não tem um endereço IP externo é por meio de um Bastion Host. Usar um Bastion Host também permite conectar-se a instâncias em outras redes VPC com peering.

Para se conectar a uma instância por meio de um Bastion Host pelo Linux e macOS, use a ferramenta de linha de comando gcloud ou o SSH. Para se conectar pelo Windows, use um cliente SSH de terceiros, como o PuTTY.

A conexão com outras instâncias de um Bastion Host requer uma chave SSH privada. Há várias maneiras de gerenciar isso:

  • Instale a ferramenta de linha de comando gcloud e a configure para que ela gerencie suas chaves privadas.
  • Encaminhe sua chave privada para a instância do Bastion Host por meio da ativação do encaminhamento do agente no seu cliente SSH.

Veja as etapas completas nos exemplos abaixo:

gcloud

A ferramenta de linha de comando gcloud permite que você se conecte a instâncias que não têm endereços IP externos sem encaminhar suas chaves SSH privadas para o Bastion Host. Para isso, instale o gcloud na sua estação de trabalho local e na instância do Bastion Host, caso ainda não tenha feito isso.

Para usar a ferramenta de linha de comando gcloud para se conectar a uma instância que não tem um endereço IP externo, siga as etapas a seguir:

  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 incluindo --scopes compute-rw em seu comando. Para mais informações, consulte Como alterar a conta de serviço e os escopos de acesso de uma instância.

  2. Conceda as permissões do IAM necessárias para permitir que o Bastion Host acesse sua chave SSH pública usando o Login do SO (recomendado) ou os metadados do projeto. Use um dos seguintes procedimentos:

    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. Substitua external-instance-name pelo nome da instância do Bastion Host que você está usando para ter acesso à rede interna.

    gcloud compute ssh external-instance-name
    
  4. Na instância do Bastion Host do Linux, use o comando gcloud compute ssh com a sinalização --internal-ip para se conectar a instâncias usando os respectivos endereços IP internos. Substitua internal-instance-name pelo nome da instância à que você quer se conectar.

    gcloud compute ssh internal-instance-name --internal-ip
    

Depois de se conectar, execute comandos em sua instância usando este terminal. Quando terminar, desconecte-se da instância executando o comando exit.

Linux e macOS

Se você precisar encaminhar chaves privadas para a instância do Bastion Host, será necessário adicionar as chaves a ssh-agent. Em seguida, use o comando gcloud compute ssh ou ssh para estabelecer a conexão inicial com o Bastion Host e encaminhar as chaves no agente SSH. Esse processo funciona apenas nas estações de trabalho Linux e macOS. Se for necessário o encaminhamento de chaves privadas para um Bastion Host por uma estação de trabalho Windows, siga as instruções do PuTTY.

Para se conectar a uma instância sem um endereço IP externo por 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. Na sua máquina local, inicie ssh-agent para que as chaves SSH sejam gerenciadas para você:

    $ eval ssh-agent $SHELL
    
  3. Execute o comando ssh-add para carregar a chave SSH particular do seu computador local no agente e use-a na autenticação de todos os comandos SSH. Substitua private-key pelo nome do arquivo da sua chave privada.

    $ ssh-add ~/.ssh/private-key
    
  4. 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 à qual você quer se conectar. Você encontra os endereços nas colunas IP externo e IP interno da página Instâncias de VM.

    Acessar a página Instâncias de VM

  5. Conecte-se à instância do Bastion Host do Linux usando ssh ou gcloud compute ssh. Em ambas as opções, inclua o argumento -A para ativar o encaminhamento do agente de autenticação.

    Conecte-se à instância do Bastion Host do Linux e encaminhe as chaves privadas com o ssh.

    $ ssh -A username@bastion-host-external-ip

    Substitua:

    • username: o nome anexado à chave SSH.
    • bastion-host-external-ip: o endereço IP externo da instância do Bastion Host que você está usando para ter acesso à rede interna.

    Também é possível se conectar à instância do Bastion Host e encaminhar as chaves privadas com o comando gcloud compute ssh. Essa opção permite que você se conecte à instância do Bastion Host usando a ferramenta de linha de comando gcloud e, em seguida, use o ssh regular com as credenciais encaminhadas ao se conectar a endereços IP internos. Substitua bastion-host-instance-name pelo nome da instância do Bastion Host que você está usando para ter acesso à rede interna.

    gcloud compute ssh --ssh-flag="-A" bastion-host-instance-name
    
  6. A partir da instância do host Bastion do Linux, conecte-se à que não tem um endereço IP externo usando o SSH.

    $ ssh username@internal-instance-ip-address

    Substitua:

    • username: o nome anexado à chave SSH.
    • internal-instance-ip-address: o endereço IP interno da instância à qual você quer se conectar.

Depois de se conectar, execute comandos em sua instância usando este terminal. Quando terminar, desconecte-se da instância executando o comando exit.

Windows

Para se conectar a uma instância sem um endereço IP externo pelas estações de trabalho Windows, siga estas etapas:

  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 à qual você quer se conectar. Você encontra os endereços nas colunas IP externo e IP interno da página Instâncias de VM.

    Acessar a página "Instâncias"

  3. Conecte-se à instância do Bastion Host do Linux usando PuTTY. Para passar sua chave SSH privada para o Bastion Host, ative a configuração Permitir encaminhamento de agente, conforme mostrado na seguinte captura de tela:

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

  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
    

    Substitua:

    • username: o nome do usuário que se conecta à instância. Este será o nome de usuário que você especificou quando criou a chave SSH.
    • internal-ip-address: o endereço IP interno da instância à qual você quer se conectar.

    Depois de se conectar, execute comandos em sua instância usando este terminal. Quando terminar, desconecte-se da instância executando o comando exit.

Como se conectar por meio do IAP

O uso do SSH com o recurso de encaminhamento de TCP do IAP inclui uma conexão SSH dentro do HTTPS, que é enviada para a instância remota.

  1. Conceda o papel roles/iap.tunnelResourceAccessor ao usuário que quer se conectar à VM.

  2. Conecte-se à VM.

    gcloud compute ssh instance-name --zone zone
    

    Substitua:

    • instance-name: o nome da instância a que você quer se conectar.
    • zone: o nome da zona em que a instância está localizada.

Para mais informações, inclusive sobre como configurar regras de acesso baseado no contexto e acessar outras portas TCP na VM, consulte Como usar o encaminhamento de TCP.

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

Por padrão, as imagens públicas e os sistemas operacionais mais comuns não permitem login raiz usando SSH. As instâncias permitem conectar como raiz usando SSH apenas se forem configuradas 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

Substitua:

  • project-id: o ID 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

Conectar-se a instâncias do Windows com o 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 Google Cloud em que a instância do Windows Server está localizada.

  3. Na 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 você pular esta etapa, 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 ignorar as verificações de credenciais. Substitua ip-address pelo endereço IP externo, o nome DNS ou o nome do computador Windows da instância à que você quer se conectar.

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

Após a conexão, o prompt de comando é 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

Substitua:

  • ip-address: o endereço IP, o nome do DNS ou o nome do computador Windows para a instância à que você quer se conectar.
  • script: um ou mais comandos a executar na instância remota. Por exemplo, especifique Get-EventLog -log "Windows PowerShell" para receber 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. O comando gcloud compute ssh permite usar as credenciais de SSH de uma conta de serviço para se conectar de uma instância a outra, permitindo que você execute comandos na segunda instância como a conta de serviço.

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, imagine que você tem o ambiente a seguir:

  • 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 para envolvidos no 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. Esta etapa exige 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 gcloud na instância A para criar uma conexão SSH em cadeia com a instância B. A ferramenta gcloud identifica que a instância B está ativada para usar o Login do SO e também tem os papéis do IAM necessários para estabelecer uma 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