OpenSSH 9.8 no Windows Server 2016: limites, atualização e alternativas

Tem um Windows Server 2016 com OpenSSH 9.2 e quer chegar à 9.8? Este guia explica por que não dá para “forçar” a 9.8 pelos canais suportados e traz um passo a passo completo para atualizar, com segurança, para a versão mais recente oficialmente disponível no port Win32‑OpenSSH.

Índice

Visão geral do cenário

O contexto é direto: existe um servidor executando Windows Server 2016 com OpenSSH 9.2, e o objetivo é atualizar especificamente para a edição 9.8 do OpenSSH.

O ponto chave: o Windows Server 2016 não traz OpenSSH nativo do sistema. Em meados de setembro de 2024, o port oficial para Windows (Win32‑OpenSSH) disponibilizava, no canal de releases, versões até 9.5.0.0p1‑Beta. Isso significa que, mesmo que exista uma edição 9.8 para plataformas Unix‑like, não há como “forçar” essa versão no Windows Server 2016 se o port Win32‑OpenSSH ainda não a tiver publicado.

Conclusão prática: no Windows Server 2016, o caminho suportado é instalar ou atualizar para a versão mais recente disponível do Win32‑OpenSSH. Quando a edição 9.8 for lançada nesse port, você poderá atualizar; antes disso, não.

Resposta e solução

Resposta em uma frase: não é possível “forçar” o OpenSSH para 9.8 no Windows Server 2016 pelos canais suportados se a edição correspondente ainda não existir no Win32‑OpenSSH; instale ou atualize para a release mais recente do port oficial e mantenha monitoramento das próximas releases.

Guia de atualização seguro

Download e preparação

Baixe o pacote binário do port oficial para Windows, normalmente chamado OpenSSH‑Win64.zip, a partir da página de releases do Win32‑OpenSSH. Após o download:

  1. Mova o arquivo para o servidor (por exemplo, para C:\Temp).
  2. Desbloqueie o arquivo para evitar bloqueios de origem remota: Unblock-File 'C:\Temp\OpenSSH-Win64.zip'
  3. (Opcional mas recomendado) Valide a integridade comparando o hash: Get-FileHash 'C:\Temp\OpenSSH-Win64.zip' -Algorithm SHA256

Instalação com PowerShell

Execute os passos abaixo em um console do PowerShell como Administrador. O destino recomendado é C:\Program Files\OpenSSH.

# Pare serviços se já existirem
Stop-Service sshd -ErrorAction SilentlyContinue
Stop-Service ssh-agent -ErrorAction SilentlyContinue

Crie a pasta de destino (se ainda não existir)

New-Item -ItemType Directory -Path 'C:\Program Files\OpenSSH' -Force | Out-Null

Extraia os binários

Expand-Archive -Path 'C:\Temp\OpenSSH-Win64.zip' -DestinationPath 'C:\Program Files\OpenSSH' -Force

Navegue até a pasta de instalação

Set-Location 'C:\Program Files\OpenSSH'

Instale os serviços do servidor e do agente

powershell.exe -ExecutionPolicy Bypass -File .\install-sshd.ps1

Gere as chaves de host (se ainda não existirem)

.\ssh-keygen.exe -A

Opcional: inclua a pasta no PATH do sistema para facilitar uso de ssh/scp/sftp no shell

\$sysPath = \[Environment]::GetEnvironmentVariable('Path','Machine')
if (\$sysPath -notlike 'C:\Program Files\OpenSSH') {
\[Environment]::SetEnvironmentVariable('Path', \$sysPath + ';C:\Program Files\OpenSSH', 'Machine')
}

Defina o tipo de inicialização e inicie os serviços

Set-Service -Name sshd -StartupType Automatic
Set-Service -Name ssh-agent -StartupType Automatic
Start-Service sshd
Start-Service ssh-agent 

Primeira configuração

A configuração do servidor fica em C:\ProgramData\ssh\sshd_config. Faça um backup antes de qualquer ajuste:

Copy-Item 'C:\ProgramData\ssh\sshdconfig' 'C:\ProgramData\ssh\sshdconfig.bak' -Force

Abra o arquivo em um editor com privilégios elevados e revise, no mínimo:

  • Port: por padrão, 22.
  • PasswordAuthentication: avalie desativar (no) quando possível.
  • PubkeyAuthentication: mantenha habilitado (yes).
  • AuthorizedKeysFile: confirme o caminho padrão .ssh/authorized_keys no perfil do usuário.
  • Subsystem sftp: use sftp-server.exe do próprio pacote.

Em seguida, habilite a regra de firewall se necessário:

New-NetFirewallRule -Name 'OpenSSH-Server-22' `
  -DisplayName 'OpenSSH Server (Port 22)' `
  -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

Verificação e testes

  • Confirme a versão do cliente: ssh -V
  • Verifique o estado dos serviços: Get-Service sshd,ssh-agent
  • Teste a conectividade local: Test-NetConnection -ComputerName localhost -Port 22
  • Tente uma conexão de loopback para validar autenticação e banner: ssh -v localhost
  • Cheque logs operacionais no Visualizador de Eventos, em Applications and Services Logs → OpenSSH → Operational.

Atualização no mesmo local

Se você já possui o Win32‑OpenSSH instalado e apenas vai atualizar para uma release mais nova do port, o processo é essencialmente substituir os binários preservando C:\ProgramData\ssh:

# Parar serviços
Stop-Service sshd -ErrorAction SilentlyContinue
Stop-Service ssh-agent -ErrorAction SilentlyContinue

Backup da pasta de instalação e da configuração

Compress-Archive -Path 'C:\Program Files\OpenSSH\*' -DestinationPath 'C:\Temp\OpenSSH-backup.zip' -Force
Copy-Item 'C:\ProgramData\ssh\*' 'C:\Temp\ssh-config-backup' -Recurse -Force

Substituir binários pela nova versão extraída

Expand-Archive -Path 'C:\Temp\OpenSSH-Win64.zip' -DestinationPath 'C:\Program Files\OpenSSH' -Force

Reexecutar o instalador de serviços (idempotente)

powershell.exe -ExecutionPolicy Bypass -File 'C:\Program Files\OpenSSH\install-sshd.ps1'

Iniciar serviços

Start-Service sshd
Start-Service ssh-agent

Validar

ssh -V
Get-Service sshd 

Reversão rápida

Se algo sair do esperado, reestabeleça os binários anteriores:

Stop-Service sshd,ssh-agent -ErrorAction SilentlyContinue
Expand-Archive -Path 'C:\Temp\OpenSSH-backup.zip' -DestinationPath 'C:\Program Files\OpenSSH' -Force
powershell.exe -ExecutionPolicy Bypass -File 'C:\Program Files\OpenSSH\install-sshd.ps1'
Start-Service sshd,ssh-agent

Práticas recomendadas

  • Backup prévio: salve C:\ProgramData\ssh\sshdconfig e as chaves de host (C:\ProgramData\ssh\sshhost_*).
  • Firewall: garanta a liberação de 22/TCP e de eventuais portas alternadas.
  • Compatibilidade: releases nove ponto x podem descontinuar opções; revise seu sshd_config após o upgrade.
  • Gerenciadores de pacote: Chocolatey ou Winget dependem de mantenedores e não criam versões inexistentes no port oficial; use com cautela e confira o que será instalado.
  • Serviço do agente: habilite o ssh-agent apenas se necessário; caso contrário, deixe em Manual para reduzir consumo.
  • Permissões rígidas: assegure ACLs corretas em authorized_keys para evitar recusa de login por segurança.

Segurança e compatibilidade

Algumas mudanças das linhas recentes do OpenSSH impactam ambientes Windows:

  • Algoritmos herdados: chaves DSA e RSA com SHA‑1 são desaconselhadas ou desativadas. Prefira ED25519 e RSA com SHA‑2.
  • Parâmetros de troca de chaves: atualize clients e automações para dar suporte a curvas modernas e KEX atuais.
  • Políticas corporativas: se o servidor estiver em domínio e sob GPO de criptografia, valide previamente para evitar incompatibilidades.

Exemplo de endurecimento básico no sshd_config (ajuste conforme seu contexto):

# Porta padrão
Port 22

Apenas chave pública

PasswordAuthentication no
PubkeyAuthentication yes

Algoritmos preferidos

HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256
PubkeyAcceptedAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256

SFTP do pacote

Subsystem sftp sftp-server.exe

Restringir logins (exemplo)

AllowUsers admin.ssh svc.deploy

AllowGroups ssh-users

Permissões de chaves e perfis

Para evitar falhas de autenticação por chaves, defina ACLs mínimas no diretório .ssh do usuário:

$user = 'CONTOSO\alice'   # ajuste para sua conta
$home = 'C:\Users\alice'  # ajuste para o perfil correspondente

Pasta .ssh

icacls "\$home.ssh" /inheritance\:r
icacls "\$home.ssh" /grant\:r "\$user:(OI)(CI)(F)" "SYSTEM:(OI)(CI)(RX)" "BUILTIN\Administrators:(OI)(CI)(RX)"

Arquivo authorized\_keys

icacls "\$home.ssh\authorized\_keys" /inheritance\:r
icacls "\$home.ssh\authorized\_keys" /grant\:r "\$user:(F)" "SYSTEM:(R)" "BUILTIN\Administrators:(R)" 

Automação com PowerShell

O script abaixo automatiza a instalação ou atualização a partir de um pacote local, mantendo configuração e chaves:

param(
  [Parameter(Mandatory=$true)]
  [string]$ZipPath = 'C:\Temp\OpenSSH-Win64.zip',
  [string]$InstallDir = 'C:\Program Files\OpenSSH'
)

\$ErrorActionPreference = 'Stop'

Write-Host 'Parando serviços...'
Stop-Service sshd -ErrorAction SilentlyContinue
Stop-Service ssh-agent -ErrorAction SilentlyContinue

Write-Host 'Criando backups...'
\$ts = Get-Date -Format yyyyMMdd\_HHmmss
\$bk = "C:\Temp\OpenSSH-backup-\$ts.zip"
if (Test-Path \$InstallDir) { Compress-Archive -Path "\$InstallDir\*" -DestinationPath \$bk -Force }

if (Test-Path 'C:\ProgramData\ssh') {
Copy-Item 'C:\ProgramData\ssh\*' "C:\Temp\ssh-config-\$ts" -Recurse -Force
}

Write-Host 'Extraindo binários...'
New-Item -Type Directory -Path \$InstallDir -Force | Out-Null
Expand-Archive -Path \$ZipPath -DestinationPath \$InstallDir -Force
Set-Location \$InstallDir

Write-Host 'Instalando serviços...'
powershell.exe -ExecutionPolicy Bypass -File .\install-sshd.ps1

if (-not (Get-Service sshd -ErrorAction SilentlyContinue)) {
throw 'Serviço sshd não encontrado após instalação.'
}

Write-Host 'Gerando chaves de host (se necessário)...'
.\ssh-keygen.exe -A

Write-Host 'Configurando inicialização...'
Set-Service sshd -StartupType Automatic
Set-Service ssh-agent -StartupType Automatic

Write-Host 'Iniciando serviços...'
Start-Service sshd
Start-Service ssh-agent

Write-Host 'Validação...'
ssh -V
Get-Service sshd | Format-List Name,Status,StartType 

Uso de gerenciadores de pacote

Chocolatey e Winget podem facilitar a manutenção, porém convém lembrar:

  • Disponibilidade: as versões publicadas nesses canais dependem de mantenedores e podem estar defasadas.
  • Servidor antigo: Winget não é nativo no Windows Server 2016 e requer pré‑requisitos adicionais.
  • Suporte: mesmo por esses canais, não surgirá uma versão que o port oficial ainda não liberou.

Alternativas quando a exigência é estrita

  • Aguardar a release do port: o caminho suportado é esperar a publicação correspondente do Win32‑OpenSSH.
  • Compilação própria: é possível compilar a partir do código‑fonte, mas o processo é mais complexo e fica sem suporte oficial.
  • Atualizar o sistema: mover para Windows Server 2019 ou 2022 simplifica a gestão, já que há recurso opcional de OpenSSH e pipeline de atualização mais direto.

Erros comuns e diagnóstico

ProblemaCausa provávelComo resolver
Serviço não iniciaPermissões, porta ocupada, arquivo corrompidoReveja sshd_config, verifique a porta com Get-NetTCPConnection, reinstale binários e examine o log operacional do OpenSSH
Chave pública ignoradaACLs permissivas no authorized_keysAplicar ACLs estritas conforme comandos icacls acima
Cliente não consegue negociarAlgoritmos antigos, política corporativaHabilite ED25519 e RSA com SHA‑2; atualize o cliente e revise KEX/Ciphers
Conflito de caminhos no PATHPresença de outra cópia de ssh.exeGaranta a precedência de C:\Program Files\OpenSSH no PATH do sistema
Bloqueio por firewallRegra ausente ou escopo restritoCrie ou ajuste a regra com New-NetFirewallRule

Perguntas frequentes

Como confirmar qual binário está sendo usado? Rode Get-Command ssh | Format-List Source e verifique o caminho do executável efetivo.

É possível manter versões lado a lado? Tecnicamente, sim, em pastas distintas, mas isso complica a manutenção. Prefira uma instalação clara e única.

Posso mudar a porta padrão? Sim. Altere Port no sshd_config, crie a regra de firewall correspondente e reinicie o serviço.

Onde ficam os logs? O port Win32‑OpenSSH registra eventos no Visualizador de Eventos, em Applications and Services Logs → OpenSSH → Operational. A verbosidade é controlada por LogLevel no sshd_config.

O recurso opcional do sistema está disponível? No Windows Server 2016, não. Em edições mais novas do sistema, você pode usar Get-WindowsCapability -Online | ? Name -like 'OpenSSH*' para listar recursos.

Checklist de implementação

  • Baixar o OpenSSH‑Win64.zip do port oficial.
  • Fazer backup de configuração e chaves.
  • Extrair para C:\Program Files\OpenSSH.
  • Executar install-sshd.ps1 e ssh-keygen -A.
  • Configurar firewall e sshd_config.
  • Definir Automatic para sshd e, se necessário, para ssh-agent.
  • Validar com ssh -V, Get-Service e testes de conexão.

Resumo rápido

No Windows Server 2016, não há como “forçar” OpenSSH 9.8 se o Win32‑OpenSSH ainda não publicou essa edição; a prática correta é instalar a release mais recente disponível do port oficial e monitorar novas versões.


Anexo: três formas viáveis de seguir em frente, caso alguém exija exatamente 9.8:

  1. Aguardar a publicação da edição correspondente no Win32‑OpenSSH, então atualizar normalmente.
  2. Compilar por conta própria a partir do código‑fonte (compreendendo os riscos, complexidade e falta de suporte formal).
  3. Atualizar o sistema operacional para uma edição de Windows Server mais nova, que oferece o OpenSSH como recurso opcional e um ciclo de atualização mais simples.
Índice