Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A maior parte das autenticações feitas em ambientes Windows é feita com um par nome de usuário e senha, o que funciona bem para sistemas que compartilham um domínio comum. Quando você trabalha entre domínios, como entre sistemas locais e hospedados na nuvem, esse tipo de autenticação torna-se vulnerável a invasões de força bruta.
Em comparação, os ambientes do Linux geralmente usam pares de chaves públicas/privadas para impulsionar a autenticação que não exige o uso de senhas adivinhadas. O OpenSSH inclui ferramentas para ajudar a dar suporte à autenticação baseada em chave, especificamente:
- ssh-keygen para gerar chaves seguras.
- ssh-agent e ssh-add para armazenar chaves privadas com segurança.
- scp e sftp para copiar com segurança arquivos de chave pública durante o uso inicial de um servidor.
Este documento fornece uma visão geral de como usar essas ferramentas no Windows para começar a usar a autenticação baseada em chave com o Secure Shell (SSH). Se você não estiver familiarizado com o gerenciamento de chaves SSH, recomendamos que você examine o documento NIST IR 7966, intitulado Segurança do Gerenciamento de Acesso Interativo e Automatizado usando o SSH (Secure Shell).
Pares de chaves
Os pares de chaves referem-se aos arquivos de chave pública e privada usados por determinados protocolos de autenticação.
A autenticação de chave pública SSH usa algoritmos criptográficos assimétricos para gerar dois arquivos de chave: um privado e outro público. Cada arquivo de chave privada é o equivalente a uma senha e deve permanecer protegido em todas as circunstâncias. Se alguém adquirir sua chave privada, poderá entrar como você para qualquer servidor SSH ao qual você tenha acesso. A chave pública é o que é colocado no servidor SSH e pode ser compartilhado sem comprometer a chave privada.
O servidor SSH e o cliente podem usar autenticação baseada em chave para comparar a chave pública de um nome de usuário fornecido com a chave privada correspondente. Se a chave pública do lado do servidor não puder ser validada em relação à chave privada do lado do cliente, a autenticação falhará.
A autenticação multifator pode ser implementada com pares de chaves ao inserir uma frase secreta durante a geração do par de chaves. Para obter mais informações, consulte a geração de chave de usuário. O usuário é solicitado a solicitar a frase secreta durante a autenticação. A frase secreta combinada com a presença da chave privada é usada no cliente SSH para autenticar o usuário.
Importante
Uma sessão remota aberta por meio da autenticação baseada em chave não tem credenciais de usuário associadas. Como resultado, a sessão não é capaz de autenticação de saída como o usuário. Esse comportamento é por design.
Geração de chave de host
As chaves públicas têm requisitos específicos de ACL (lista de controle de acesso) que, no Windows, equivalem a permitir apenas o acesso aos administradores e ao usuário do Sistema. Na primeira vez que o sshd
serviço é usado, o par de chaves para o host é gerado automaticamente.
Importante
Você precisa instalar o OpenSSH Server antes de executar os comandos neste artigo. Para obter mais informações, consulte Introdução ao OpenSSH para Windows.
Por padrão, você precisa iniciar sshd
manualmente. Para configurá-lo para iniciar automaticamente sempre que o servidor for reiniciado, execute os seguintes comandos em um prompt do PowerShell com privilégios elevados no servidor:
# Set the sshd service to be started automatically.
Get-Service -Name sshd | Set-Service -StartupType Automatic
# Start the sshd service.
Start-Service sshd
Como não há nenhum usuário associado sshd
ao serviço, as chaves de host são armazenadas em C:\ProgramData\ssh.
Geração de chave do usuário
Para usar a autenticação baseada em chave, primeiro você precisa gerar pares de chaves pública/privada para o cliente. Você pode usar ssh-keygen.exe
para gerar arquivos de chave e especificar os seguintes algoritmos de geração de chave:
- Algoritmo de Assinatura Digital (DSA)
- Rivest-Shamir-Adleman (RSA)
- Algoritmo de assinatura digital de curva elíptica (ECDSA)
- ED25519
Se você não especificar um algoritmo, Ed25519 será usado. Um algoritmo e um comprimento de chave fortes devem ser usados, como ECDSA neste exemplo.
Para gerar arquivos de chave usando o algoritmo ECDSA, execute o seguinte comando em uma janela do PowerShell ou prompt de comando em seu cliente:
ssh-keygen -t ecdsa
A saída do comando deve ser semelhante às seguintes linhas, exceto que username
é substituído pelo nome de usuário:
Generating public/private ecdsa key pair.
Enter file in which to save the key (C:\Users\username/.ssh/id_ecdsa):
No prompt, você pode selecionar Enter para aceitar o caminho de arquivo padrão ou especificar um caminho ou nome de arquivo para as chaves geradas.
Em seguida, você será solicitado a usar uma frase secreta para criptografar seus arquivos de chave privada. Em geral, não recomendamos o uso de uma frase secreta vazia, pois a frase secreta funciona com o arquivo de chave para fornecer autenticação de dois fatores. Mas, para este exemplo, você pode deixar a frase secreta vazia.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\username/.ssh/id_ecdsa.
Your public key has been saved in C:\Users\username/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:OIzc1yE7joL2Bzy8!gS0j8eGK7bYaH1FmF3sDuMeSj8 username@LOCAL-HOSTNAME
The key's randomart image is:
+--[ECDSA 256]--+
| . |
| o |
| . + + . |
| o B * = . |
| o= B S . |
| .=B O o |
| + =+% o |
| *oo.O.E |
|+.o+=o. . |
+----[SHA256]-----+
Agora você tem um par de chaves ECDSA público/privado no local especificado. O arquivo .pub é a chave pública e o arquivo sem uma extensão é a chave privada:
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 6/3/2021 2:55 PM 464 id_ecdsa
-a---- 6/3/2021 2:55 PM 103 id_ecdsa.pub
Um arquivo de chave privada é equivalente a uma senha e deve ser protegido da mesma maneira que você protege sua senha.
Você pode usar ssh-agent
para armazenar com segurança suas chaves privadas em um contexto de segurança do Windows associado à sua conta do Windows. Para configurar o ssh-agent
serviço a ser iniciado automaticamente sempre que o computador for reiniciado e para usar ssh-add
para armazenar a chave privada, execute os seguintes comandos em um prompt do PowerShell com privilégios elevados no servidor:
# By default, the ssh-agent service is disabled. Configure it to start automatically.
# Run the following command as an administrator.
Get-Service ssh-agent | Set-Service -StartupType Automatic
# Start the service.
Start-Service ssh-agent
# The following command should return a status of Running.
Get-Service ssh-agent
# Load your key files into ssh-agent.
ssh-add $env:USERPROFILE\.ssh\id_ecdsa
Depois de adicionar a chave ao ssh-agent
serviço em seu cliente, o ssh-agent
serviço recupera automaticamente a chave privada local e a passa para o cliente SSH.
Importante
Recomendamos que você faça backup de sua chave privada para um local seguro e, em seguida, exclua-a do sistema local depois de adicioná-la ao ssh-agent
serviço. A chave privada não pode ser recuperada do agente quando um algoritmo forte é usado, como ECDSA neste exemplo. Se você perder o acesso à chave privada, precisará criar um novo par de chaves e atualizar a chave pública em todos os sistemas com os quais interage.
Implantar a chave pública
Para usar a chave de usuário que você criou anteriormente, você precisa colocar o conteúdo da chave pública (\.ssh\id_ecdsa.pub) no servidor em um arquivo de texto. O nome e o local do arquivo dependem se a conta de usuário é membro do grupo de administradores local ou de uma conta de usuário padrão. As seções a seguir abrangem usuários padrão e administrativos.
Usuário padrão
Você precisa colocar o conteúdo da chave pública (\.ssh\id_ecdsa.pub) no servidor em um arquivo de texto chamado authorized_keys
em C:\Users\username\.ssh\. Você pode copiar sua chave pública usando o utilitário de transferência de arquivo seguro OpenSSH scp
ou usando o PowerShell para gravar a chave no arquivo.
Você pode usar o código a seguir para copiar a chave pública para o servidor. Na última linha, substitua username
pelo nome de usuário. Inicialmente, você será solicitado a inserir uma senha para a conta de usuário do servidor.
# Get the public key file generated previously on your client.
$authorizedKey = Get-Content -Path $env:USERPROFILE\.ssh\id_ecdsa.pub
# Generate the PowerShell command to run remotely that copies the public key file generated previously on your client to the authorized_keys file on your server.
$remotePowershell = "powershell New-Item -Force -ItemType Directory -Path $env:USERPROFILE\.ssh; Add-Content -Force -Path $env:USERPROFILE\.ssh\authorized_keys -Value '$authorizedKey'"
# Connect to your server and run the PowerShell command by using the $remotePowerShell variable.
ssh username@domain1@contoso.com $remotePowershell
Usuário administrativo
Você precisa colocar o conteúdo da chave pública (\.ssh\id_ecdsa.pub) no servidor em um arquivo de texto chamado administrators_authorized_keys
em C:\ProgramData\ssh\. Você pode copiar sua chave pública usando o utilitário de transferência de arquivo seguro OpenSSH scp
ou usando o PowerShell para gravar a chave no arquivo. A ACL nesse arquivo precisa ser configurada para permitir apenas o acesso aos administradores e ao usuário do Sistema.
Você pode usar o código a seguir para copiar a chave pública para o servidor e configurar a ACL. Na última linha, substitua username
pelo nome de usuário. Inicialmente, você será solicitado a inserir uma senha para a conta de usuário do servidor.
Observação
Este exemplo mostra as etapas para criar o arquivo administrators_authorized_keys
. Esse arquivo só se aplica a contas de administrador. Você deve usá-lo em vez do arquivo específico do usuário no local do perfil do usuário.
# Get the public key file generated previously on your client.
$authorizedKey = Get-Content -Path $env:USERPROFILE\.ssh\id_ecdsa.pub
# Generate the PowerShell command to run remotely that copies the public key file generated previously on your client to the authorized_keys file on your server.
$remotePowershell = "powershell Add-Content -Force -Path $env:ProgramData\ssh\administrators_authorized_keys -Value '''$authorizedKey''';icacls.exe ""$env:ProgramData\ssh\administrators_authorized_keys"" /inheritance:r /grant ""Administrators:F"" /grant ""SYSTEM:F"""
# Connect to your server and run the PowerShell command by using the $remotePowerShell variable.
ssh username@domain1@contoso.com $remotePowershell
Para versões localizadas não em inglês do sistema operacional, o script precisa ser modificado para refletir os nomes de grupo adequadamente. Para evitar erros que podem ocorrer quando você concede permissões a nomes de grupo, você pode usar o SID (identificador de segurança) no lugar do nome do grupo. Você pode recuperar o SID executando Get-LocalGroup | Select-Object Name, SID
. Quando você usa o SID no lugar do nome do grupo, ele deve ser precedido por um asterisco (*). No exemplo a seguir, o grupo Administradores usa o SID S-1-5-32-544
:
$remotePowershell = "powershell Add-Content -Force -Path $env:ProgramData\ssh\administrators_authorized_keys -Value '''$authorizedKey''';icacls.exe ""$env:ProgramData\ssh\administrators_authorized_keys"" /inheritance:r /grant ""*S-1-5-32-544:F"" /grant ""SYSTEM:F"""
Essas etapas concluem a configuração necessária para usar a autenticação baseada em chave com OpenSSH no Windows.
Depois de executar esses comandos do PowerShell, você pode se conectar ao sshd
host de qualquer cliente que tenha a chave privada.