14 de novembro de 2021 • 8 min de leitura
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
essh-add
: para armazenar chaves privadas com segurança.scp
esftp
: 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.