A coisa mais deprimente para mim é conectar-me aos hosts do Windows. Eu não sou um oponente ou um fã dos produtos da Microsoft e deles. Todo produto tem seu próprio objetivo. Mas é realmente doloroso para mim me conectar aos servidores Windows, devido a dois pontos: é difícil de configurar (Hi WinRM com HTTPS) e é realmente instável (Olá RDP para VMs do outro lado do oceano).
Felizmente, encontrei o projeto
Win32-OpenSSH . Percebi que quero compartilhar minha experiência com ele. Acredito que ajudará alguém e poupará muitos nervos.

Maneiras da instalação:
- Manualmente
- Via pacote Chocolatey
- Via Ansible, digamos o papel jborean93.win_openssh
Vou explicar a maneira manual, porque outras são óbvias.
Devo observar que este projeto está no estágio beta e não é recomendável usá-lo na produção.
Bem, vamos baixar a versão mais recente. Atualmente, é
7.9.0.0p1-beta . Também possui versões de 32 e 64 bits.
Em seguida, descompacte-o em
C: \ Arquivos de Programas \ OpenSSH .
Importante: É necessário conceder acesso de gravação apenas ao grupo
SISTEMA e Administradores.
Além disso, instale serviços por meio do script shell
install-sshd.ps1, localizado no diretório OpenSSH
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
Vamos permitir conexões de entrada na porta 22:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
Nota: o applet
New-NetFirewallRule é apenas para Windows Server 2012 e superior. Para sistemas operacionais mais antigos ou de desktop, você pode usar o seguinte comando:
netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22
Inicie o serviço:
net start sshd
Isso gerará automaticamente chaves de host em
% programdata% \ ssh se elas ainda não existirem.
Você pode configurar o serviço de inicialização automática por comando:
Set-Service sshd -StartupType Automatic
Além disso, você pode alterar o shell padrão (é
cmd por padrão após a instalação):
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
Nota: você deve definir o caminho absoluto.
O que vem a seguir?
Podemos configurar o
sshd_config , localizado em
C: \ ProgramData \ ssh .
Ex .:
PasswordAuthentication no PubkeyAuthentication yes
Em seguida, criamos o diretório
.ssh dentro do diretório do usuário (
C: \ Users \ <diretório_do_usuário> ) e o arquivo
allowed_keys dentro dele. Podemos colar chaves públicas nesse arquivo.
Importante: o único usuário em que diretório está, deve ter permissões de gravação para este arquivo.
A propósito, se você não pode corrigi-lo, pode desativar a verificação de permissões via config:
StrictModes no
Além disso, o diretório
C: \ Arquivos de Programas \ OpenSSH contém 2 scripts (
FixHostFilePermissions.ps1 ,
FixUserFilePermissions.ps1 ), que devem,
mas não devem,
obrigar as permissões de correção, incluindo as permissões
allowed_keys , mas não.
Não se esqueça de reiniciar o serviço
sshd para aplicar as alterações.
ru-mbp-666:infrastructure$ ssh Administrator@192.168.1.10 -i ~/.ssh/id_rsa Windows PowerShell Copyright (C) 2016 Microsoft Corporation. All rights reserved. PS C:\Users\Administrator> Get-Host Name : ConsoleHost Version : 5.1.14393.2791 InstanceId : 653210bd-6f58-445e-80a0-66f66666f6f6 UI : System.Management.Automation.Internal.Host.InternalHostUserInterface CurrentCulture : en-US CurrentUICulture : en-US PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy DebuggerEnabled : True IsRunspacePushed : False Runspace : System.Management.Automation.Runspaces.LocalRunspace PS C:\Users\Administrator>
Prós / contras pessoais.
Prós:
- Maneira padrão de conectar-se a qualquer servidor (Windows / Linux)
Quando você tem alguns hosts Windows, é inconveniente:
Então, aqui vamos nós via ssh, mas aqui via RDP,
e de um modo geral, é a melhor prática com bastiões, primeiro túnel ssh, depois RDP através do túnel. Oh me mate, querida, mais uma vez. - Fácil de configurar
Eu acho que é óbvio. - Velocidade de conexão com o host remoto
Sem GUI, economizamos recursos do host e tamanho dos dados transmitidos
Contras:
- Não pode substituir o RDP em alguns casos.
Nem todas as coisas que você pode fazer via PowerShell. Quero dizer os casos em que a GUI é necessária.
Ligações:
Projeto no githubDocumentos possíveis