Aluizio Developer

Introdução ao OpenSSH em ambiente Windows

O OpenSSH foi adicionado ao Windows 10 e ao Windows Server 2019 no segundo semestre de 2018, e desde então podemos usá-lo através do PowerShell.

OpenSSH

OpenSSH é uma versão de software livre das ferramentas SSH (Secure Shell) usadas por administradores de Linux e outros sistemas não Windows para gerenciamento multiplataforma de sistemas remotos. Porém, no segundo semestre de 2018 o OpenSSH foi adicionado ao Windows 10 e ao Windows Server 2019, e desde então podemos usá-lo através do PowerShell.

O SSH baseia-se em uma arquitetura cliente-servidor em que o sistema no qual o usuário está trabalhando é o cliente, e o sistema remoto que está sendo gerenciado é o servidor. O OpenSSH inclui uma variedade de componentes e ferramentas projetados para fornecer uma abordagem segura e direta à administração remota do sistema.

No ambiente Windows essas ferramentas se resumem a:

  • sshd.exe: é o componente do servidor SSH que deve estar em execução no sistema que está sendo gerenciado remotamente.
  • ssh.exe: é o componente de cliente SSH executado no sistema local do usuário.
  • ssh-keygen.exe: gera, gerencia e converte chaves de autenticação para SSH.
  • ssh-agent.exe: armazena chaves privadas usadas para autenticação de chave pública.
  • ssh-add.exe: adiciona chaves privadas à lista permitida pelo servidor.
  • ssh-keyscan.exe: ajuda a coletar as chaves de host SSH públicas de vários hosts.
  • sftp.exe é o serviço que fornece o protocolo FTP seguro e é executado por SSH

com o scp.exe, que é um utilitário de cópia de arquivo executado no SSH.

Instalar o OpenSSH

Os dois componentes do OpenSSH podem ser instalados usando as Configurações do Windows em dispositivos com Windows 10 e Windows Server 2019.

Para instalar os componentes do OpenSSH no Windows 10:

Abra Configurações, selecione Aplicativos, Aplicativos e Recursos, Recursos Opcionais.

  • Encontre Cliente do OpenSSH e clique em Instalar.

  • Encontre Servidor do OpenSSH e clique em Instalar.

A instalação do Servidor OpenSSH criará e habilitará uma regra de firewall chamada OpenSSH-Server-In-TCP. Isso permite o tráfego SSH de entrada na porta 22 do seu PC. Se essa regra não estiver habilitada e essa porta não estiver aberta, as conexões serão recusadas.

Iniciar e configurar o Servidor OpenSSH

Para iniciar e configurar o servidor OpenSSH para uso inicial, abra o PowerShell como administrador e execute os seguintes comandos para iniciar o sshd service:

# Start the sshd service
Start-Service sshd

# OPTIONAL but recommended:
Set-Service -Name sshd -StartupType 'Automatic'

# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
    Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
    New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
    Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}

Serviço sshd

As chaves públicas têm requisitos específicos de ACL que, no Windows, são equivalentes a permitir somente o acesso a administradores. No primeiro uso de sshd, o par de chaves do host será gerado automaticamente.

Por padrão, o serviço sshd é configurado para ser iniciado manualmente. Para iniciá-lo sempre que o servidor for reinicializado, execute os seguintes comandos em um prompt do PowerShell no servidor.

Configurar o serviço sshd para inicializar automaticamente nos próximos boots:

Get-Service -Name sshd | Set-Service -StartupType Automatic

Executar o serviço sshd:

Start-Service sshd

Como não há nenhum usuário associado ao serviço sshd, as chaves de host são armazenadas em C:\ProgramData\ssh.

Conectar-se ao Servidor OpenSSH

Uma vez instalado, você poderá se conectar ao Servidor do OpenSSH de um dispositivo com Windows 10 ou Windows Server 2019, com o cliente do OpenSSH instalado usando o PowerShell, conforme mostrado a seguir. Execute o PowerShell como administrador:

ssh username@hostname

Depois de conectado, você receberá uma mensagem conforme exibido abaixo:

The authenticity of host 'servername (10.00.00.001)' can't be established.
ECDSA key fingerprint is SHA256:(<a large string>).
Are you sure you want to continue connecting (yes/no)?

Selecionando yes, você adiciona esse servidor à lista de hosts SSH conhecidos no seu cliente Windows.

Você precisará fornecer a senha neste momento. Como precaução de segurança, sua senha não será exibida conforme você digitar.

Depois de conectado, você verá o prompt do shell de comando do Windows do Host Remoto:

domain\username@SERVERNAME C:\Users\username>

Gerenciamento de chaves do OpenSSH

A maior parte das autenticações feitas em ambientes Windows ocorre com um par de nome de usuário e senha, o que funciona bem para sistemas que compartilham um domínio comum. Ao trabalhar entre domínios, por exemplo, entre sistemas locais e hospedados na nuvem, eles se tornam vulneráveis a intrusões de força bruta.

Por comparação, os ambientes do Linux geralmente usam pares de chave pública/chave privada para controlar a autenticação, dispensando o uso de senhas que podem ser adivinhadas. O OpenSSH inclui ferramentas para ajudar a dar suporte a isso, especificamente:

  • ssh-keygen: para gerar chaves seguras.
  • ssh-agent e ssh-add: para armazenar chaves privadas com segurança.
  • scp e sftp: para copiar arquivos de chave pública com segurança durante o uso inicial de um servidor.

Pares de chaves SSH

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 de criptografia assimétrica para gerar dois arquivos de chave, um "privado" e outro "público". Os arquivos de chave privada são equivalentes a uma senha e devem ficar protegidos em todas as circunstâncias. Se alguém adquirir sua chave privada, poderá fazer logon como você para qualquer servidor SSH ao qual você tenha acesso. A chave pública deve ser colocada no servidor SSH e pode ser compartilhada sem comprometer a chave privada.

Ao usar a autenticação de chave com um servidor SSH, o servidor e o cliente comparam 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á.

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. O binário ssh-keygen.exe é usado para gerar arquivos de chave e os algoritmos DSA, RSA, ECDSA ou Ed25519 podem ser especificados. Se nenhum algoritmo for especificado, o RSA será usado. Um algoritmo e um comprimento de chave fortes devem ser usados, como Ed25519 neste exemplo.

Para gerar arquivos de chave usando o algoritmo Ed25519, execute o seguinte em um prompt do PowerShell ou cmd no cliente:

ssh-keygen -t ed25519

Isso deve exibir o seguinte:

Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\username\.ssh\id_ed25519):

Você pode pressionar Enter para aceitar o padrão ou especificar um path/filename em que deseja que as chaves sejam geradas. Em seguida você será solicitado a usar uma frase secreta para criptografar seus arquivos de chave privada. Ela pode ficar vazia, porém não é recomendado.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\username\.ssh\id_ed25519.
Your public key has been saved in C:\Users\username\.ssh\id_ed25519.pub.
The key fingerprint is:
SHA256:OIsx4yE7joL2Bzy8!gS0j8eGK7bYaH1FFGv4DuMeSj8 username@server@LOCAL-HOSTNAME

The key's randomart image is:
+--[ED25519 256]--+
|        .        |
|         o       |
|    . + + .      |
|   o B * = .     |
|   o= B S .      |
|   .=B O o       |
|  + =+% o        |
| *oo.O.E         |
|+.o+=o. .        |
+----[SHA256]-----+

Um par de chaves Ed25519 foi criado no local especificado. Os arquivos com extensão .pub são chaves públicas e os arquivos sem extensão são chaves privadas:

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         6/3/2021   0:01 PM            465 ed25519
-a----         6/3/2021   0:01 PM            104 ed25519.pub

Os arquivos de chaves privadas são equivalentes a senhas e devem ser protegidos, da mesma maneira que você protege sua senha. Nesse caso, use ssh-agent para armazenar as chaves privadas em um contexto de segurança do Windows, associado ao seu logon do Windows.

Para fazer isso, inicie o serviço ssh-agent como administrador e use ssh-add para armazenar a chave privada.

# By default the ssh-agent service is disabled. Allow it to be manually started for the next step to work.
# Make sure you're running as an Administrator.
Get-Service ssh-agent | Set-Service -StartupType Manual

# Start the service
Start-Service ssh-agent

# This should return a status of Running
Get-Service ssh-agent

# Now load your key files into ssh-agent
ssh-add ~\.ssh\id_ed25519

Depois de concluir essas etapas, sempre que você precisar de uma chave privada para autenticação desse cliente, o ssh-agent recuperará automaticamente a chave privada local e a passará para o cliente SSH.

É altamente recomendável fazer backup da chave privada em um local seguro e, em seguida, excluí-la do sistema local depois de adicioná-la ao ssh-agent.

Como implantar a chave pública

Para usar a chave de usuário criada anteriormente, o conteúdo de sua chave pública ~\.ssh\id_ed25519.pub precisa ser colocado no servidor em um arquivo de texto, cujo nome e local dependem se a conta de usuário é membro do grupo de administradores locais ou uma conta de usuário padrão.

Usuário padrão

O conteúdo da chave pública ~\.ssh\id_ed25519.pub precisa ser colocado no servidor em um arquivo de texto chamado authorized_keys em C:\Users\username\.ssh\. O cliente OpenSSH inclui o scp, que é um utilitário de transferência de arquivo seguro, para ajudar com isso.

Usuário administrador

O conteúdo da chave pública ~\.ssh\id_ed25519.pub precisa ser colocado no servidor em um arquivo de texto chamado administrators_authorized_keys em C:\ProgramData\ssh\. O cliente OpenSSH inclui o scp, que é um utilitário de transferência de arquivo seguro, para ajudar com isso. A ACL nesse arquivo precisa ser configurada para permitir apenas o acesso aos administradores e ao Sistema.

Referências:

OpenSSH no Windows

Instalar o OpenSSH

Gerenciamento de chaves do OpenSSH

Comentários