Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A maioria da autenticação em ambientes Windows é feita com um par de 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 fica vulnerável a invasões de força bruta.
Em comparação, os ambientes Linux geralmente usam pares de chaves públicas/privadas para direcionar a autenticação que não requer o uso de senhas adivinháveis. O OpenSSH inclui ferramentas para ajudar a suportar a autenticação baseada em chaves, especificamente:
- ssh-keygen for generating secure keys.
- ssh-agent and ssh-add for securely storing private keys.
- scp and sftp to securely copy public key files during initial use of a server.
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 Secure Shell (SSH). Se não estiver familiarizado com a gestão de chaves SSH, recomendamos vivamente que consulte o documento IR 7966 do NIST, intitulado Security of Interactive and Automated Access Management Using Secure Shell (SSH).
Key pairs
Os pares de chaves referem-se aos arquivos de chave pública e privada que são usados por determinados protocolos de autenticação.
SSH public key authentication uses asymmetric cryptographic algorithms to generate two key files—one private and the other public. Cada ficheiro de chave privada é o equivalente a uma palavra-passe e deve permanecer protegido em todas as circunstâncias. Se alguém adquirir a sua chave privada, pode iniciar sessão como você em qualquer servidor SSH a que tenha acesso. A chave pública é o que é colocado no servidor SSH e pode ser compartilhada sem comprometer a chave privada.
O servidor SSH e o cliente podem usar a autenticação baseada em chave para comparar a chave pública de um nome de usuário fornecido com a chave privada. 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 inserindo uma senha quando o par de chaves é gerado. Para obter mais informações, consulte Geração de chave de usuário. O usuário é solicitado a fornecer a senha durante a autenticação. A senha combinada com a presença da chave privada é usada no cliente SSH para autenticar o usuário.
Important
Uma sessão remota aberta por meio de autenticação baseada em chave não tem credenciais de usuário associadas. Como resultado, a sessão não é capaz de realizar a autenticação de saída como o utilizador. Este comportamento é intencional.
Geração de chaves de host
As chaves públicas têm requisitos específicos de lista de controle de acesso (ACL) que, no Windows, equivalem a permitir acesso apenas a administradores e ao usuário do sistema. Na primeira vez que o serviço sshd
é usado, o par de chaves para o host é gerado automaticamente.
Important
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 a partir de 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
Because there's no user associated with the sshd
service, the host keys are stored under C:\ProgramData\ssh.
Geração de chave de utilizador
Para usar a autenticação baseada em chave, primeiro você precisa gerar pares de chaves pública/privada para seu cliente. Você pode usar ssh-keygen.exe
para gerar arquivos de chave e pode 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 forte e o comprimento da chave 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 do Prompt de Comando em seu cliente:
ssh-keygen -t ecdsa
A saída do comando deve se parecer com as seguintes linhas, exceto que username
é substituído pelo seu nome de usuário:
Generating public/private ecdsa key pair.
Enter file in which to save the key (C:\Users\username/.ssh/id_ecdsa):
At the prompt, you can select Enter to accept the default file path, or you can specify a path or file name for your generated keys.
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 senha vazia, porque a senha funciona com o arquivo de chave para fornecer autenticação de dois fatores. Mas para este exemplo, você pode deixar a senha 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 ficheiro de chave privada é o equivalente a uma palavra-passe e deve ser protegido da mesma forma que protege a sua palavra-passe.
Pode utilizar ssh-agent
para armazenar com segurança as suas chaves privadas num contexto de segurança do Windows associado à sua conta do Windows. Para configurar o serviço ssh-agent
para iniciar 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 serviço ssh-agent
no seu cliente, o serviço ssh-agent
recupera automaticamente a chave privada local e passa-a para o seu cliente SSH.
Important
We recommend that you back up your private key to a secure location and then delete it from the local system after you add it to the ssh-agent
service. A chave privada não pode ser recuperada do agente quando um algoritmo forte é usado, como ECDSA neste exemplo. Se perder o acesso à chave privada, terá de 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
To use the user key that you created previously, you need to place the contents of your public key (\.ssh\id_ecdsa.pub) on the server into a text file. O nome e o local do arquivo dependem se a conta de usuário é um membro do grupo de administradores locais ou uma conta de usuário padrão. As seções a seguir abrangem usuários padrão e administrativos.
Standard user
You need to place the contents of your public key (\.ssh\id_ecdsa.pub) on the server into a text file called authorized_keys
in C:\Users\username\.ssh\. Você pode copiar sua chave pública usando o OpenSSH scp
utilitário de transferência segura de arquivos 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 seu 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
Administrative user
You need to place the contents of your public key (\.ssh\id_ecdsa.pub) on the server into a text file called administrators_authorized_keys
in C:\ProgramData\ssh\. Você pode copiar sua chave pública usando o OpenSSH scp
utilitário de transferência segura de arquivos ou usando o PowerShell para gravar a chave no arquivo. A ACL neste arquivo precisa ser configurada para permitir acesso apenas 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 seu nome de usuário. Inicialmente, você será solicitado a inserir uma senha para a conta de usuário do servidor.
Note
Este exemplo mostra as etapas para criar o arquivo administrators_authorized_keys
. Este ficheiro aplica-se apenas 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 do sistema operacional que não sejam em inglês, o script precisa ser modificado para refletir os nomes dos grupos de acordo. Para evitar erros que podem ocorrer quando concede permissões a nomes de grupos, pode utilizar o identificador de segurança (SID) em vez 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 (*). In the following example, the Administrators group uses the 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"""
Estas 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 host sshd
de qualquer cliente que tenha a chave privada.