O protocolo Secure Shell (SSH) e o projeto \textit{OpenSSH} existem há décadas no Linux. No entanto, o OpenSSH no Windows não foi amplamente adotado no mundo Windows até recentemente. Como tal, um servidor Windows geralmente não vem pré-configurado e pronto para uso, sendo necessário algum ajuste.
Neste tutorial, você aprenderá a se conectar ao seu servidor Windows tão facilmente quanto no 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
Ao contrário dos servidores Linux, os servidores Windows não possuem um servidor SSH pré-configurado. No entanto, a Microsoft lançou uma versão de \textit{OpenSSH} de código aberto para o Windows. Com esse lançamento, agora é possível configurar um servidor SSH em uma máquina Windows.
Para começar, você precisará baixar o OpenSSH. Para fazer isso, siga as etapas abaixo:
- Conecte-se à área de trabalho em um servidor Windows usando o \textit{Remote Desktop (RDP)} ou seu cliente de gerenciamento de área de trabalho preferido.
2. No seu desktop do Windows Server, abra um console do Windows PowerShell elevado.
3. Em seguida, copie o código abaixo, cole-o na janela do PowerShell e pressione Enter. Este script irá baixar a versão mais recente do OpenSSH, que até o momento desta escrita, é v8.1.0.0p1-Beta para o diretório de trabalho atual.
Se você preferir salvar o código do PowerShell para baixar o OpenSSH, também pode abrir um editor de código como o Windows PowerShell ISE ou Visual Studio Code e salvá-lo lá.
4. O arquivo OpenSSH-Win64.zip deve estar agora no seu diretório de trabalho atual. Verifique isso executando o comando abaixo.
Como você pode ver abaixo, o arquivo OpenSSH-Win64.zip existe no diretório.

Instalando o OpenSSH
Depois de baixar o OpenSSH-Win64.zip, o próximo passo é instalar o OpenSSH no servidor. Não há assistente de instalação caso você esteja esperando por isso.
- 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.
2. 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 OpenSSH SSH Server (sshd) e o serviço OpenSSH Authentication Agent (sshd-agent).
Você pode ver o resultado esperado abaixo.

Para garantir que o servidor SSH inicie automaticamente, execute o comando abaixo no PowerShell.
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.
Instalar o OpenSSH não cria automaticamente uma regra de exceção de firewall para permitir o tráfego SSH. Portanto, sua próxima tarefa é criar manualmente a regra do firewall.
Uma das maneiras mais fáceis de criar uma nova regra de firewall do Windows é usando o PowerShell e o cmdlet New-NetFirewallRule
. O comando abaixo cria uma regra de firewall chamada Permitir SSH que permite todo o tráfego TCP de entrada destinado à porta 22.
Copie o comando abaixo e execute-o no PowerShell.
A captura de tela abaixo mostra a saída esperada no PowerShell após criar a regra do firewall.

Conectar-se 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
em seu computador local.
As mesmas etapas desta seção também se aplicam ao conectar-se a um servidor SSH Linux.
1. Desta vez, abra o PowerShell em seu computador local.
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.
3. Uma vez que você está 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 sim e pressione Enter para continuar.
4. Quando solicitado a senha, digite a senha da sua conta e pressione Enter.

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 do host remoto. Para fazer isso, digite hostname
e pressione Enter. O comando deve retornar o nome do computador remoto.

Alterando o Shell Padrão do 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 comandos é o CMD. Ter o CMD como o shell SSH padrão é bom, mas se você preferir usar o PowerShell como o shell padrão, siga estas etapas.
Para mudar o shell padrão do OpenSSH de CMD para PowerShell:
Primeiro, abra uma janela do PowerShell elevada 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 do registro HKLM:\SOFTWARE\OpenSSH. Defina os dados da string DefaultShell para o caminho do PowerShell do Windows C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.
A captura de tela abaixo mostra o resultado esperado do comando.

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-se 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 acessar seu servidor SSH.
Preparando o arquivo administrators_authorized_keys
Chaves públicas devem 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 as etapas abaixo para criar o arquivo administrators_authorized_keys e definir sua adequada lista de controle de acesso (ACL).
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 New-Item
cmdlet.
Você deve ver um resultado semelhante à captura de tela abaixo.

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.
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_key para administrators_authorized_keys faz sentido porque 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.

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

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 incorporadas ao Windows 10 (e superior) e à maioria dos sistemas operacionais Linux.
O exemplo mostrado nesta seção funciona tanto em computadores com Windows quanto em 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.
2. Em seguida, digite o comando ssh-keygen
e pressione Enter. Quando solicitado a inserir o local do arquivo para salvar a chave que você está gerando, mantenha o local padrão e pressione Enter. 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 senha em branco. Neste ponto, você não precisa usar uma senha para testar.
Adicionar uma senha à sua chave privada aumenta significativamente sua segurança. Uma senha age 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).

Implantando a Chave Pública no Servidor SSH do Windows
Agora que você gerou seu par de chaves privada-pública, seu próximo passo é copiar a chave pública para o arquivo C:\ProgramData\ssh\administrators_authorized_keys no servidor SSH.
Em seu computador local, em um console do 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 consultar o comentário acima de cada comando para saber o que cada comando faz.
2. Insira sua senha quando solicitado, e o ssh prosseguirá para copiar a chave pública. Você verá um resultado semelhante, como mostrado abaixo.

Conectando-se com SSH usando Autenticação de Chave Pública
Agora que você copiou sua chave pública para o servidor SSH, não é mais necessário usar uma senha para autenticação. Como você pode ver abaixo, o ssh não solicitou uma senha.

Configurando Autenticação por Certificado
Assim como a autenticação por chave pública, a autenticação por certificado não requer senha ou é protegida por frase de acesso. 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 nos arquivos authorized_keys ou administrators_authorized_keys no servidor SSH. Em vez disso, a chave pública é assinada usando uma 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. A única diferença é que, desta vez, você precisará especificar um nome de arquivo para as novas chaves da CA. Para fazer isso, no seu servidor Windows 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.
Ao ser solicitado uma frase secreta, deixe a frase secreta vazia e pressione Enter.
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.

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 adicionar o item de configuração no arquivo 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 da CA. O que resta agora é assinar a chave pública do seu usuário.
No seu computador local, em um console do PowerShell:
1. Copie o arquivo id_rsa.pub
para o seu drive doméstico 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.
2. Faça login no seu servidor Windows usando ssh. Depois de fazer login, execute ssh-keygen
para assinar a chave pública do usuário. Você notará que o comando abaixo utilizou vários parâmetros. Vamos analisá-los.
-s C:\ProgramData\ssh\ca_userkeys
– especifique o local da chave CA para assinar a chave pública. Neste exemplo, a chave CA é aquela que você gerou.-I id_username
– especifique o ID que você deseja atribuir à chave pública do usuário assinada. Altere o valor deid_username
para qualquer nome que desejar.-V +4w
– este parâmetro especifica o período de validade da 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 do 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).
Depois de executar o comando na sua sessão SSH, você deverá obter uma saída semelhante à mostrada abaixo. Como pode ver, o comando gerou um novo arquivo chamado id_rsa-cert.pub, que é o certificado de usuário assinado.

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.
Após a conclusão da cópia, você encontrará o certificado de usuário assinado na sua pasta pessoal, como mostrado abaixo.

Conectando-se com SSH usando Autenticação de Certificado
Você configurou autenticação por certificado e agora tem o seu certificado de usuário. Agora, você deve testar se consegue se 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. No entanto, se você ativou a autenticação por chave pública anteriormente, 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 subsequentes 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.
2. Neste ponto, os arquivos authorized_keys e administrators_authorized_keys estão vazios, como você pode ver na captura de tela abaixo.

3. Digite exit
e pressione Enter para desconectar da sua sessão SSH. Você voltará para sua sessão PowerShell.
4. Após remover as chaves públicas, sua próxima tentativa de login via ssh usará autenticação por certificado. A experiência de login será a mesma que a autenticação por chave pública.

Conclusão
Você agora configurou um servidor OpenSSH no Windows do zero, desde a exploração até a configuração de vários meios de autenticação. Agora, você pode se conectar aos seus servidores Windows exatamente da mesma forma que faria com o Linux!