Aprenda a configurar e usar PowerShell SSH remoting

quando a Microsoft disse que o PowerShell se tornaria um projeto de código aberto que seria executado no Windows, Linux e macOS em agosto de 2016, houve uma ruga interessante relacionada com PowerShell remoting.

Microsoft disse que este núcleo PowerShell suportaria remoting Over Secure Shell (SSH), bem como Web Services-Management (WS-MAN). Você sempre poderia usar os binários PowerShell SSH, mas o anúncio indicado suporte SSH seria uma parte integral do PowerShell. Isso abriu a capacidade de executar a administração remota de sistemas Windows e Linux facilmente usando as mesmas tecnologias.

a short history of PowerShell remoting

Microsoft introduced remoting in PowerShell version 2.0 in Windows 7 and Windows Server 2008 R2, which dramatically changed the landscape for Windows administrators. Eles poderiam criar sessões de desktop remotas para servidores, mas PowerShell remoting tornou possível gerenciar grandes números de servidores simultaneamente.

Remoting in Windows PowerShell is based on WS-MAN, an open standard from the Distributed Management Task Force. Mas como a remotagem baseada no WS-MAN é orientada para o Windows, você precisava usar outra tecnologia, geralmente SSH, para administrar sistemas Linux.

a Introdução de SSH no PowerShell Core

Nós crescemos acostumados a instalar o software no Windows, usando os assistentes, mas a instalação do OpenSSH requer mais conhecimento e mais trabalho do administrador.

SSH é um protocolo para a gestão de sistemas numa rede possivelmente não garantida. O SSH trabalha em um modo cliente-servidor e é o padrão de facto para administração remota em ambientes Linux.

PowerShell Core usa OpenSSH, um fork do SSH 1.2.12 que foi lançado sob uma licença de código aberto. O OpenSSH é provavelmente a implementação mais popular do SSH.

o código necessário para usar a remoting ws-MAN é instalado como parte do Sistema Operacional Windows. Você precisa instalar OpenSSH manualmente.

instalando OpenSSH

crescemos acostumados a instalar software em Windows usando os wizards, mas a instalação do OpenSSH requer mais informações de fundo e mais trabalho do administrador. Sem alguma intervenção manual, muitas questões podem surgir.

o processo de instalação do OpenSSH no Windows melhorou ao longo do tempo, mas ainda não é tão fácil como deveria ser. Trabalhar com o arquivo de configuração deixa muito a desejar.

Existem duas opções ao instalar o PowerShell SSH:

  1. no Windows 10 1809, Windows Server 1809, Windows Server 2019 e mais tarde, OpenSSH está disponível como uma característica opcional.
  2. Nas versões anteriores do Windows, você pode baixar e instalar o OpenSSH do GitHub.

certifique-se que o seu sistema tem os últimos patches antes de instalar o OpenSSH.

instalar a funcionalidade opcional do OpenSSH

pode instalar a funcionalidade opcional do OpenSSH usando o PowerShell. Primeiro, verifique o seu sistema com o seguinte comando:

Get-WindowsCapability -Online | where Name -like '*SSH*'
OpenSSH componentes
Figura 1. Encontre os componentes do OpenSSH no seu sistema.

Figura 1 mostra que o software do cliente OpenSSH está pré-instalado.

terá de usar o Windows PowerShell para a instalação, a menos que baixe o módulo de compatibilidade da janela para o PowerShell Core. Então você pode importar o módulo de Manutenção e gerenciamento de imagem de implantação do Windows PowerShell e executar os comandos no PowerShell Core.

instale a funcionalidade do servidor:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Path :
Online : True
RestartNeeded : False

os ficheiros SSH instalam na C:\Windows\System32\OpenSSH pasta.

obtenha o OpenSSH do GitHub

comece por obter a versão mais recente do GitHub. A última versão das instruções de instalação está neste link.

Após a transferência completa, extrair o ficheiro zip Para o C:\Program ficheiros\pasta OpenSSH. Mudar a localização para C:\Program ficheiros\OpenSSH para instalar os Serviços de SSH:

.\install-sshd.ps1
SetServiceObjectSecurity SUCCESS
ChangeServiceConfig2 SUCCESS
ChangeServiceConfig2 SUCCESS

configurar o OpenSSH

após instalação do OpenSSH, execute alguns passos de configuração adicionais.

Certifique-se de que o OpenSSH pasta está incluído no sistema variável de ambiente path:

  • C:\Windows\System32\OpenSSH\ se instalado, como o Windows recurso opcional
  • C:\Program Files\OpenSSH\ se instalado através do OpenSSH download

Definir os dois serviços para iniciar automaticamente:

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

Se instalou o OpenSSH com a funcionalidade opcional, então o Windows cria uma nova regra de firewall para permitir o acesso de entrada do SSH sobre a porta 22. Se você instalou o OpenSSH do download e, em seguida, criar a regra de firewall com este comando:

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

Iniciar o serviço sshd para gerar as chaves SSH:

Start-Service sshd

As chaves SSH e o arquivo de configuração residem em C:\ProgramData\ssh, que é uma pasta oculta. A linha de comandos padrão usada pelo SSH é a linha de comandos Windows. Isso precisa mudar para PowerShell:

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell `
-Value "C:\Program Files\PowerShell\6\pwsh.exe" -PropertyType String -Force

Agora, quando você se conectar ao sistema sobre SSH, o núcleo PowerShell irá começar e será a linha de comandos padrão. Você também pode fazer a PowerShell do shell padrão do Windows, se desejar.

Há um bug no OpenSSH nas janelas. Não funciona com caminhos com um espaço, como o caminho para o executável PowerShell Core! A solução é criar um link simbólico que cria um caminho que OpenSSH pode usar:

New-Item -ItemType SymbolicLink -Path C:\pwsh -Target 'C:\Program Files\PowerShell\6'

No arquivo sshd_config, un-comente as seguintes linhas:

PubkeyAuthentication yes
PasswordAuthentication yes

Adicionar esta linha antes de outro subsistema de linhas:

Subsystem powershell C:\pwsh\pwsh.exe -sshs -NoLogo -NoProfile

Isto diz ao OpenSSH para executar o núcleo PowerShell.

Comente a linha:

AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

Após salvar as alterações para o arquivo sshd_config, reinicie os serviços:

Restart-Service sshd
Start-Service ssh-agent

Você deve reiniciar o serviço sshd após qualquer alteração no arquivo de configuração.

Using PowerShell SSH remoting

Using remoting over SSH is very similar to remoting over WS-MAN. Você pode acessar o sistema remoto diretamente com o invoco-comando:

Invoke-Command -HostName W19DC01 -ScriptBlock {Get-Process}
richard@MANTICORE@w19dc01's password:

irá obter uma linha de comandos para a senha, que não será mostrada à medida que a Escreve.

Se é a primeira vez que você se conectou ao sistema remoto através de SSH, em seguida, você verá uma mensagem semelhante a esta:

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)?

Digite sim e pressione Enter.

pode criar uma sessão remota:

$sshs = New-PSSession -HostName W19FS01
richard@MANTICORE@w19fs01's password:

e depois usá-la:

Invoke-Command -Session $sshs -ScriptBlock {$env:COMPUTERNAME}
W19FS01

pode introduzir uma sessão de remoção do OpenSSH usando o Enter-PSSession da mesma forma que uma sessão WS-MAN. Você pode introduzir uma sessão existente ou usar o parâmetro do nome da máquina no Enter-PSSession para criar a sessão interativa.

não pode desligar uma sessão baseada em SSH; é uma técnica de WS-MAN.

pode usar as sessões WS-MAN e SSH para gerir vários computadores, como mostrado na Figura 2.

a informação da sessão mostra o mecanismo de transporte diferente — WS-MAN e SSH, respectivamente — e o parâmetro de avaliação final em uso por cada sessão.

sessões de Gestão Remota
Figura 2. Use as sessões WS-MAN e SSH em conjunto para gerenciar máquinas remotas.

Se olhar com atenção para a Figura 2, irá notar que não houve nenhuma linha de comandos para a senha na sessão SSH porque o sistema foi configurado com a autenticação baseada na chave SSH.

usando a autenticação baseada na chave SSH

Abra uma sessão PowerShell elevada. Muda a localização para o.ssh pasta na sua área de usuário:

Set-Location -Path ~\.ssh

Gerar o par de chaves:

ssh-keygen -t ed25519

Adicionar o ficheiro de chave, o SSH-agent no computador local:

ssh-add id_ed25519

Uma vez que tenha adicionado a chave privada ao SSH-agent, faça recuar a chave privada para um local seguro e remova a chave da máquina local.

copiar o ID_ ed25519.pub file into the .pasta ssh para a conta de utilizador correspondente no servidor remoto. Você pode criar uma conta, se necessário;

$pwd = Read-Host -Prompt 'Password' -AsSecureString
Password: ********
New-LocalUser -Name Richard -Password $pwd -PasswordNeverExpires
Add-LocalGroupMember -Group Administrators -Member Richard

Na máquina remota, copie o conteúdo do arquivo da chave no arquivo authorized_keys:

scp id_ed25519.pub authorized_keys

O arquivo authorized_keys necessidades de suas permissões alteradas:

  • Open File Explorer, carregue com o botão direito autorized_keys e navegue até Properties – Security – Advanced
  • Carregue em Desactivar a herança.
  • seleccione Converter permissões herdadas em permissões explícitas neste objecto.
  • Remova todas as permissões, excepto para o sistema e a sua conta de utilizador. Ambos devem ter controlo total.
Introduction to SSH with PowerShell Core.

irá ver referências ao uso do módulo OpenSSHUtils para definir as permissões, mas existe um erro na versão da galeria PowerShell que torna o ficheiro authorized_keys inutilizável.

reiniciar o serviço de sshd na máquina remota.

pode agora ligar-se à máquina remota sem usar uma senha, como mostra a Figura 2.

Se estiver a ligar – se a uma máquina não-domínio a partir de uma máquina no domínio, então terá de usar o parâmetro do utilizador depois de activar a autenticação do par de chaves:

$ss = New-PSSession -HostName W19ND01 -UserName Richard

você precisa do utilizador na máquina remota para corresponder ao seu utilizador do domínio. Não lhe será pedida uma senha.

ws-MAN ou SSH remoting?

deve usar as remotagens baseadas em WS-MAN ou SSH? Ws-MAN remoting está disponível em todos os sistemas Windows e é ativado por padrão no Windows Server 2012 e versões posteriores do servidor. Ws-MAN remoting tem algumas questões, nomeadamente a questão do duplo hop. O WS-MAN também precisa de trabalho extra para remotos para sistemas não-domain.

SSH remoting is only available in PowerShell Core; Windows PowerShell is restricted to ws-MAN remoting. É preciso uma quantidade significativa de trabalho para instalar e configurar as remotagens SSH. A documentação não é tão boa como tem de ser. As vantagens da remoting SSH são que você pode facilmente acessar máquinas não-domain e sistemas não-Windows onde SSH é o padrão para acesso remoto.

Deixe uma resposta

O seu endereço de email não será publicado.