Como Configurar o OpenSSH no Windows Server [Guia Completo]

O protocolo Secure Shell (SSH) e o projeto OpenSSH existem há décadas no Linux. No entanto, o OpenSSH no Windows só foi adotado recentemente no mundo do Windows. Como resultado, um servidor Windows geralmente não vem pré-configurado e pronto para uso, exigindo alguma configuração.

Neste tutorial, você aprenderá como acessar seu servidor Windows por SSH tão facilmente quanto com o Linux. Você aprenderá como instalar (ou atualizar) o OpenSSH no Windows, adicionar regras apropriadas ao firewall e configurar autenticação baseada em chave pública, senha e certificado.

Pré-requisitos

Para seguir efetivamente os exemplos e demonstrações neste artigo, você precisará atender aos seguintes requisitos abaixo.

  • A Windows Server machine – This article will use Windows Server 2019 Datacenter. The server this tutorial will use will have a user account called june and will connect to the server at the IP address of 40.117.77.227 with a hostname of ataWindows.
  • A local computer with PowerShell 7.1 installed. PowerShell 7.1 is available in Windows, Linux, and macOS. The examples in this article use PowerShell 7.1 in Windows 10.

Baixando o OpenSSH

Diferentemente dos servidores Linux, os servidores Windows não possuem um servidor SSH pronto para uso. No entanto, a Microsoft lançou uma versão de código aberto do OpenSSH para Windows. Com esse lançamento, agora você pode configurar um servidor SSH em uma máquina Windows.

Para começar, primeiro você precisará baixar o OpenSSH. Para fazer isso, siga as etapas abaixo:

  1. Conecte-se à área de trabalho de um servidor Windows usando o Remote Desktop (RDP) ou o cliente de gerenciador de área de trabalho de sua preferência.

2. No seu desktop do Windows Server, abra um console elevado do Windows PowerShell.

3. Em seguida, copie o código abaixo, cole-o na janela do PowerShell e pressione Enter. Este script fará o download da versão mais recente do OpenSSH, que, até o momento desta redação, é a v8.1.0.0p1-Beta, para o diretório de trabalho atual.

Se preferir salvar o código PowerShell para baixar o OpenSSH, você também pode abrir um editor de código como o Windows PowerShell ISE ou Visual Studio Code e salvá-lo lá.

## Configurar o protocolo de conexão de rede para TLS 1.2
## Definir a URL da última versão do OpenSSH
 $url = 'https://github.com/PowerShell/Win32-OpenSSH/releases/latest/'
## Criar uma solicitação da web para obter o link de download da última versão
 $request = [System.Net.WebRequest]::Create($url)
 $request.AllowAutoRedirect=$false
 $response=$request.GetResponse()
 $source = $([String]$response.GetResponseHeader("Location")).Replace('tag','download') + '/OpenSSH-Win64.zip'
## Baixar o pacote mais recente do OpenSSH para Windows para o diretório de trabalho atual
 $webClient = [System.Net.WebClient]::new()
 $webClient.DownloadFile($source, (Get-Location).Path + '\OpenSSH-Win64.zip')

4. O arquivo OpenSSH-Win64.zip deve estar agora no seu diretório de trabalho atual. Verifique isso executando o comando abaixo.

Get-ChildItem *.zip

Como você pode ver abaixo, o arquivo OpenSSH-Win64.zip existe no diretório.

Checking if the OpenSSH zip file exists

Instalando o OpenSSH

Depois de baixar OpenSSH-Win64.zip, o próximo passo é instalar o OpenSSH no servidor. Não há assistente de instalação, caso esteja esperando por isso.

  1. Enquanto ainda estiver na mesma sessão do PowerShell, copie o código abaixo e execute-o no PowerShell. Este código extrai o conteúdo do arquivo OpenSSH-Win64.zip para C:\Program Files\OpenSSH.
# Extrai o ZIP para um local temporário
 Expand-Archive -Path .\OpenSSH-Win64.zip -DestinationPath ($env:temp) -Force
# Move o conteúdo do ZIP extraído do local temporário para C:\Program Files\OpenSSH\
 Move-Item "$($env:temp)\OpenSSH-Win64" -Destination "C:\Program Files\OpenSSH\" -Force
# Desbloqueia os arquivos em C:\Program Files\OpenSSH\
 Get-ChildItem -Path "C:\Program Files\OpenSSH\" | Unblock-File

Após extrair o arquivo ZIP, execute o comando abaixo no PowerShell para executar o script C:\Program Files\OpenSSH\install-sshd.ps1. Este script instala o serviço de servidor SSH do OpenSSH (sshd) e o serviço de Agente de Autenticação do OpenSSH (sshd-agent).

& 'C:\Program Files\OpenSSH\install-sshd.ps1'

Você pode ver o resultado esperado abaixo.

Installing OpenSSH

Para garantir que o servidor SSH inicie automaticamente, execute o comando abaixo no PowerShell.


## Altera o tipo de inicialização do serviço sshd de manual para automático.
 Set-Service sshd -StartupType Automatic

## Inicia o serviço sshd.
 Start-Service sshd

Adicionando uma Regra de Firewall do Windows para Permitir Tráfego SSH

Este procedimento é aplicável apenas se o seu Servidor Windows estiver usando o Firewall do Windows. Para servidores que usam firewalls de terceiros, consulte a documentação do seu firewall sobre como permitir a porta 22.

Instalando o OpenSSH não cria automaticamente uma regra de exceção no firewall para permitir o tráfego SSH. Portanto, sua próxima tarefa é criar manualmente a regra no firewall.

Uma das maneiras mais simples de criar uma nova regra no Firewall do Windows é usando o PowerShell e o cmdlet New-NetFirewallRule. O comando abaixo cria uma regra no firewall chamada Allow SSH que permite todo o tráfego TCP de entrada destinado à porta 22.

Copie o comando abaixo e execute no PowerShell.

New-NetFirewallRule -Name sshd -DisplayName 'Allow SSH' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

A captura de tela abaixo mostra a saída esperada no PowerShell após a criação da regra no firewall.

Creating a Windows Firewall Rule to allow Port 22

Conectando com SSH usando Autenticação por Senha

Neste ponto, você instalou o OpenSSH no Windows e realizou a configuração inicial do servidor. O próximo passo é testar se a conexão via SSH realmente funciona.

Para testar seu servidor SSH recém-configurado, execute o comando ssh no seu computador local.

As mesmas etapas desta seção também se aplicam ao conectar-se a um servidor SSH Linux.

1. Do seu computador local, abra o PowerShell desta vez.

2. Em seguida, execute o comando abaixo para iniciar o processo de login SSH. Certifique-se de alterar o nome de usuário e o host remoto do seu servidor Windows.

ssh june@40.117.77.227

3. Desde que você está se conectando pela primeira vez ao servidor, você verá um prompt dizendo que a autenticidade do host não pode ser estabelecida. A mensagem significa que seu computador ainda não reconhece o host remoto. Digite yes e pressione Enter para continuar.

4. Quando solicitado a senha, digite a senha da sua conta e pressione enter.

Connecting via SSH using Password Authentication

5. Após fazer login, como você pode ver na captura de tela abaixo, você chegará ao prompt de comando do host remoto. Suponha que você queira confirmar que entrou na sessão no host remoto. Para fazer isso, digite hostname e pressione Enter. O comando deve retornar o nome do computador remoto.

Getting the hostname of the SSH server

Alterando o Shell Padrão para o OpenSSH para PowerShell

Ao fazer login pela primeira vez no seu servidor SSH do Windows, você notará que o shell padrão ou interpretador de comando é CMD. Ter o CMD como o shell SSH padrão está bem, mas se você preferir usar o PowerShell como o shell padrão, siga estas etapas.

Para alterar o shell padrão do OpenSSH de CMD para PowerShell:

Primeiro, abra uma janela elevada do PowerShell no seu Windows Server, se você ainda não tiver uma aberta.

Em seguida, crie um novo valor de string de registro chamado DefaultShell na chave de registro HKLM:\SOFTWARE\OpenSSH. Defina os dados da string DefaultShell para o caminho do Windows PowerShell C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

A captura de tela abaixo mostra o resultado esperado do comando.

Changing the default OpenSSH shell

Configurando Autenticação de Chave Pública

Nas seções anteriores, você se conectou com um nome de usuário e senha. Isso funciona, mas uma maneira mais segura de autenticar com um servidor SSH é usando um par de chaves.

Em resumo, um par de chaves consiste em duas chaves chamadas de chave pública e chave privada, que constituem um conjunto de credenciais de segurança para provar sua identidade.

A chave pública é armazenada no servidor, enquanto a chave privada permanece no computador local. Você deve tratar uma chave privada como sua senha. Se a chave privada for comprometida, qualquer pessoa pode usá-la para obter acesso ao seu servidor SSH.

Preparando o arquivo “administrators_authorized_keys”

As chaves públicas têm que estar no servidor. Mas onde? Para o OpenSSH no Windows, o servidor SSH lê as chaves públicas do arquivo C:\ProgramData\ssh\administrators_authorized_keys. No entanto, este arquivo não existe por padrão. Você deve criá-lo primeiro.

Siga os passos abaixo para criar o arquivo administrators_authorized_keys e configurar sua lista de controle de acesso (ACL) apropriada.

No Windows Server:

1. Abra um console elevado do Windows PowerShell, se ainda não estiver aberto.

2. Copie o comando abaixo e execute-o no PowerShell. Este comando cria o arquivo administrators_authorized_keys usando o cmdlet New-Item .

New-Item -Type File -Path C:\ProgramData\ssh\administrators_authorized_keys

Você deve ver um resultado semelhante à captura de tela abaixo.

Creating the administrators_authorized_keys file

3. Em seguida, obtenha a ACL atualmente atribuída ao arquivo ssh_host_dsa_key e copie essa ACL para o arquivo administrators_authorized_keys. Para fazer isso, execute o comando abaixo.

get-acl C:\ProgramData\ssh\ssh_host_dsa_key | set-acl C:\ProgramData\ssh\administrators_authorized_keys

O serviço OpenSSH requer que apenas o grupo Administradores e a conta SYSTEM tenham acesso ao arquivo administrators_authorized_keys. E copiar a ACL da chave ssh_host_dsa para administrators_authorized_keys faz sentido, pois a ACL já está configurada.

4. Agora abra o Windows Explorer.

5. Navegue até a pasta C:\ProgramData\ssh\.

6. Clique com o botão direito no arquivo administrators_authorized_keys e clique em Propriedades.

7. Na página de propriedades, clique na guia Segurança e clique em Avançado.

Opening advanced security settings

8. Em seguida, confirme se as permissões estão configuradas conforme mostrado na imagem abaixo.

Viewing advanced security permission

Gerando um Novo Par de Chaves SSH

Para gerar um novo par de chaves SSH, use o comando ssh-keygen, que faz parte das ferramentas do cliente OpenSSH integradas ao Windows 10 (e superior) e à maioria dos sistemas operacionais Linux.

O exemplo mostrado nesta seção funciona em computadores com Windows e Linux.

No seu computador local, em um console do PowerShell:

1. Navegue até o diretório .ssh da sua pasta pessoal com o comando abaixo.

cd ~/.ssh

2. Em seguida, digite o comando ssh-keygen e pressione Enter. Quando solicitado a inserir um local de arquivo para salvar a chave que você está gerando, mantenha o local padrão e pressione Enter. Fazendo isso permite que seu cliente SSH encontre suas chaves SSH ao autenticar automaticamente.

No Windows, o arquivo de chave padrão é C:\Users\<nome_de_usuário>\.ssh\id_rsa.

3. Na próxima solicitação, deixe a frase secreta em branco. Neste ponto, você não precisa usar uma frase secreta para testar.

Adicionar uma frase secreta à sua chave privada aumenta significativamente sua segurança. Uma frase secreta atua como uma autenticação de segundo fator (2FA) para sua chave privada.

Você notará que o comando criou dois arquivos; id_rsa (chave privada) e id_rsa.pub (chave pública).

Generating a new SSH key pair on the local computer

Implantando a Chave Pública no Servidor SSH do Windows

Agora que você gerou seu par de chaves público-privado, seu próximo passo é copiar a chave pública para o arquivo C:\ProgramData\ssh\administrators_authorized_keys no servidor SSH.

No seu computador local, em um console PowerShell:

1. Copie o código abaixo e execute-o no PowerShell. Certifique-se de alterar o nome de usuário e o endereço IP primeiro. Você pode se referir ao comentário acima de cada comando para saber o que cada comando faz.

# Leia a chave pública
 $public_key = Get-Content ~/.ssh/id_rsa.pub
# Anexe a chave pública ao arquivo administrators_authorized_keys no servidor usando ssh.
 ssh june@40.177.77.227 "'$($public_key)' | Out-File C:\ProgramData\ssh\administrators_authorized_keys -Encoding UTF8 -Append"

2. Insira sua senha quando solicitado, e o ssh prosseguirá para copiar a chave pública. Você verá um resultado semelhante, como mostrado abaixo.

Deploying the public key to the Windows SSH server

Conectando-se com SSH usando Autenticação de Chave Pública

Agora que você copiou sua chave pública para seu servidor SSH, você não precisa mais usar uma senha para autenticação. Como você pode ver abaixo, o ssh não solicitou uma senha.

Connecting with SSH using Public Key Authentication

Configurando Autenticação de Certificado

Assim como a autenticação de chave pública, a autenticação de certificado é sem senha ou protegida por frase secreta. Para habilitar o login por certificado, siga o mesmo procedimento de geração de um par de chaves sem implantar a chave pública no servidor SSH.

Você não precisa mapear a chave pública para os arquivos authorized_keys ou administrators_authorized_keys no servidor SSH. Em vez disso, a chave pública é assinada usando uma chave de autoridade de certificação (CA).

Criando a Chave da Autoridade de Certificação (CA)

Gerar as chaves da CA para assinatura é semelhante à geração de um par de chaves de usuário que você fez anteriormente neste artigo. Apenas desta vez, você precisará especificar um nome de arquivo para as novas chaves da CA. Para fazer isso, no seu Windows Server em um console do PowerShell:

Execute o comando ssh-keygen como mostrado abaixo. Este comando cria a chave CA em C:\ProgramData\ssh\ca_userkeys, mas sinta-se à vontade para usar um nome de arquivo diferente. Usar um nome de arquivo diferente não afetará a funcionalidade da chave CA.

Quando solicitado uma frase secreta, deixe-a em branco e pressione Enter.

ssh-keygen -f C:\ProgramData\ssh\ca_userkeys

Você pode ver abaixo que o comando criou dois arquivos. ca_userkeys, que é a chave privada, e ca_userkeys.pub, que é a chave pública.

Creating the Certificate Authority (CA) Key on a Windows SSH server

Agora que você gerou as chaves CA, informe ao servidor SSH para confiar na CA e onde encontrar a chave CA. Para fazer isso, adicione uma nova linha TrustedUserCAKeys caminho/para/ca_userkeys.pub ao arquivo C:\ProgramData\ssh\sshd_config no servidor.

Execute os comandos abaixo para anexar o item de configuração no arquivo sshd_config.

# Se o servidor SSH for Windows
 echo TrustedUserCAKeys C:\ProgramData\ssh\ca_userkeys.pub>> C:\ProgramData\ssh\sshd_config

Assinando a Chave Pública do Usuário

Neste ponto, você gerou as chaves CA e configurou o servidor SSH para confiar no arquivo de chave pública CA. O que resta agora é assinar a chave pública do usuário.

No seu computador local, em um console do PowerShell:

1. Copie o arquivo id_rsa.pub para a sua unidade doméstica no servidor SSH usando o comando SCP. Certifique-se de alterar o nome de usuário e o endereço IP para os valores corretos.

scp ((Resolve-Path ~/.ssh/id_rsa.pub).Path) june@40.117.77.227:id_rsa.pub

2. Faça login no seu servidor Windows usando ssh. Depois de fazer o login, execute ssh-keygen para assinar a chave pública do usuário. Você vai perceber que o comando abaixo usou vários parâmetros. Vamos analisá-los.

  • -s C:\ProgramData\ssh\ca_userkeys – especifica o local da chave do CA para assinar a chave pública. Neste exemplo, a chave do CA é aquela que você gerou.
  • -I id_username – especifica o ID que você deseja atribuir à chave pública do usuário assinada. Altere o valor de id_username para qualquer nome que você queira.
  • -V +4w – este parâmetro especifica o período de validade para a chave assinada. Neste exemplo, +4w significa que a chave do usuário assinada será válida por quatro semanas. Você pode alterar esse valor para o período de validade desejado.
  • -n username – este é o nome de usuário que será proprietário da chave pública assinada.
  • <caminho para id_rsa.pub> – este é o local da chave pública do usuário para assinar (Windows).
ssh-keygen -s C:\ProgramData\ssh\ca_userkeys -I id_username -V +4w -n username ~/id_rsa.pub

Após executar o comando na sua sessão SSH, você deverá obter uma saída semelhante à mostrada abaixo. Como você pode ver, o comando gerou um novo arquivo chamado id_rsa-cert.pub, que é o certificado de usuário assinado.

Signing the User Key

3. Agora, volte para a sessão do PowerShell do seu computador local e copie o arquivo id_rsa-cert.pub do servidor para o seu computador local. Altere o nome de usuário e o endereço IP para os valores corretos antes de executar o comando.

scp june@40.117.77.227:id_rsa-cert.pub ((Resolve-Path ~/.ssh/).Path)

Após a conclusão da cópia, você encontrará o certificado de usuário assinado na sua pasta pessoal, como mostrado abaixo.

Finding the SSH user certificate

Conectando-se com SSH usando Autenticação de Certificado

Você configurou a autenticação por certificado e agora tem o seu certificado de usuário. Agora você deve testar se consegue conectar ao servidor SSH com autenticação por certificado.

O comando para se conectar ao SSH com um certificado é o mesmo que usar uma senha ou chave pública. Mas, se você ativou anteriormente a autenticação por chave pública, desative-a primeiro. Caso contrário, o ssh continuará usando seu par de chaves em vez do seu certificado.

Para desativar seu par de chaves, remova sua chave pública do arquivo administrators_authorized_keys. Para fazer isso, siga estas etapas.

Observe que os comandos a seguir esvaziarão todo o arquivo administrators_authorized_keys, removendo efetivamente todas as chaves públicas mapeadas. Se você não quiser limpar todas as chaves públicas mapeadas, use um editor de texto para remover as chaves públicas selecionadas de cada arquivo manualmente.

Enquanto estiver conectado ao Windows Server via SSH:

1. Execute o código abaixo no PowerShell para esvaziar o arquivo administrators_authorized_keys.

# Limpar o arquivo administrators_authorized_keys
 $NULL > C:\ProgramData\ssh\administrators_authorized_keys
# Confirme que o arquivo administrators_authorized_keys está vazio
 Get-Content C:\ProgramData\ssh\administrators_authorized_keys

2. Neste ponto, os arquivos authorized_keys e administrators_authorized_keys estão vazios, como você pode ver na captura de tela abaixo.

Emptying the administrators_authorized_keys

3. Digite exit e pressione Enter para desconectar da sessão SSH. Você voltará para sua sessão do PowerShell.

4. Depois de remover as chaves públicas, sua próxima tentativa de login ssh usará a autenticação por certificado. A experiência de login será a mesma da autenticação por chave pública.

Connecting with SSH using Certificate Authentication

Conclusão

Agora você configurou um servidor OpenSSH do Windows do zero até explorar e configurar vários meios de autenticação. Agora você pode se conectar aos seus Servidores Windows exatamente como faria com o Linux!

Source:
https://adamtheautomator.com/openssh-windows/