SSH e PowerShell: Configurar Cliente SSH no Windows

Era uma vez, você estava limitado no tipo de computadores aos quais poderia se conectar com o Windows PowerShell usando o Remoting do PowerShell. Como o Remoting do PowerShell só suportava o provedor WsMan, suas chances de se conectar a computadores rodando Linux, por exemplo, eram nulas. No entanto, lá em 2015, a Microsoft introduziu suporte para SSH no Windows, trazendo toneladas de potencial e finalmente permitindo que você usasse SSH e PowerShell juntos.

Neste artigo, vamos mergulhar e ver como configurar o cliente SSH do Windows e como você pode aproveitar o SSH e o Remoting do PowerShell.

Este post sobre SSH e PowerShell faz parte da série de blogs #PS7Now. Não deixe de conferir todos os outros colaboradores desta série no final deste post.

Antes de Começar

Este artigo será um tutorial passo a passo. Se você pretende seguir junto, certifique-se de cumprir os seguintes pré-requisitos:

  • Windows 10 – Todos os exemplos usarão o Windows 10 Build 1903. O exemplo estará no mesmo domínio que o Windows Server remoto.
  • O PowerShell v6+ instalado no Windows 10 – Todos os exemplos usarão o PowerShell 7 RC2.
  • A remote SSH server – All examples will use a Windows Server SSH machine. If you’re connecting to a Linux machine, you can skip the server setup steps.
  • A porta TCP 22 disponível no servidor remoto

Configuração do Cliente SSH (Windows 10)

Antes de abrir um console do PowerShell, você precisará primeiro realizar algumas tarefas únicas para fazer com que o SSH e o PowerShell funcionem juntos para garantir que o Windows 10 possa se conectar a um servidor SSH remoto.

Adicionar a Pasta OpenSSH à variável de ambiente PATH

O OpenSSH vem pré-instalado no Windows 10, mas às vezes precisa de um pouco de ajuda para funcionar com a Remoção do PowerShell. Se você já tentou usar Enter-PSSession, por exemplo, para se conectar a um sistema SSH remoto e encontrou o erro abaixo, você precisa garantir o caminho para o executável OpenSSH (ssh.exe) no PATH da variável de ambiente.

Enter-PSSession : An error has occurred which PowerShell cannot handle. A remote session might have ended.

Para adicionar o caminho da pasta OpenSSH à variável de ambiente PATH, clique no botão Iniciar e procure por configurações avançadas do sistema, em seguida, clique em Exibir Configurações Avançadas do Sistema conforme mostrado abaixo.

Adding OpenSSH folder path

Quando a janela Propriedades do Sistema aparecer, clique no botão Variáveis de Ambiente.

Environment Variables in System Properties

Na janela Variáveis de Ambiente, em Variáveis do Sistema, selecione Path e clique em Editar.

System Variables in the Environment Variables

Na janela Editar Variável de Ambiente, clique em Novo e depois insira o caminho onde o executável ssh.exe está localizado. Para este tutorial, o caminho é C:\Program Files\OpenSSH conforme mostrado abaixo. Uma vez inserido, clique em OK duas vezes para salvar o novo valor.

Editing Environment Variable

Especifique o Subsistema SSH

Agora você precisará especificar o subsistema SSH para o PowerShell chamar ao se conectar via SSH no servidor remoto do Windows. Se você não informar ao PowerShell qual subsistema usar, inevitavelmente receberá o seguinte erro:

Enter-PSSession : O processo em segundo plano relatou um erro com a seguinte mensagem: A sessão do cliente SSH terminou com a mensagem de erro: solicitação de subsistema falhou no canal 0.

Observe que se você não estiver se conectando a uma máquina do Windows Server, não precisará realizar essas etapas.

No servidor remoto do Windows, abra o arquivo C:\ProgramData\ssh\ssh_config. Role para baixo até a seção override default of no subsystems do arquivo ssh_config. A seção será semelhante à captura de tela abaixo.

Override Default of no Subsystems

Abaixo da linha existente do Subsystem, adicione o subsistema do PowerShell usando a linha abaixo:

Subsystem	powershell pwsh.exe -sshs -NoLogo -NoProfile

Agora salve o arquivo ssh_config e reinicie o serviço do Windows sshd no servidor remoto do Windows, como mostrado abaixo.

Get-Service -Name sshd | Restart-Service

Depois que o serviço reiniciar, você deve conseguir se conectar via SSH e PowerShell.

Conectando via PowerShell e SSH

Agora que a configuração está completa, é hora de testar o PowerShell Remoting.

Primeiro, tente entrar em uma sessão interativa usando o cmdlet Enter-PSSession. Ao contrário do que você pode estar acostumado, você não usará o parâmetro ComputerName. Em vez disso, você usará o parâmetro HostName para especificar o computador remoto.

Por padrão, o PowerShell Remoting ainda usa o WsMan. Para substituir o padrão, use o parâmetro SSHTransport para indicar que deseja se conectar via SSH e PowerShell.

Quando você tentar se conectar pela primeira vez com um nome de usuário e senha, será necessário criar uma chave privada SSH. Para fazer isso, você será solicitado, conforme mostrado abaixo. Quando solicitado, digite ‘y’ para aceitar.

Creating SSH Private Key

Em seguida, você será solicitado a senha do usuário com o qual está atualmente conectado.

Observe que, neste exemplo, o cliente Windows 10 e o servidor SSH do Windows Server estão no mesmo domínio do Active Directory. Por padrão, a Remoção do PowerShell tentará autenticar com o usuário conectado. Você também pode usar o parâmetro Credential para especificar um nome de usuário e senha diferentes.

Após fornecer a senha, você deverá estar em um prompt familiar de Remoção do PowerShell.

Powershell Remoting Prompt

Agora saia da sessão com exit e experimente New-PSSession. Observe que, ao usar os mesmos parâmetros HostName e SSHTransport como antes, o Transport agora aparece como SSH.

Você ainda pode usar o WsMan como protocolo de transporte também, usando o parâmetro ComputerName sem usar o parâmetro SSHTransport.

Não é necessário usar um nome de usuário e senha para o SSH. Em vez disso, você pode usar um arquivo de chave privada e utilizar o parâmetro KeyFilePath para fornecer a localização.

New PSSession Showing up SSH

Não se esqueça de limpar suas sessões abertas com Get-PSSession | Remove-PSSession!

Resumo

Agora você deve saber como configurar tanto o Windows 10 quanto o Windows Server para usar o SSH com a Remoção do PowerShell. Uma vez configurado, a única diferença entre usar o WsMan como protocolo de transporte e o SSH são alguns parâmetros!

Se você deseja aprender mais sobre o PowerShell e o SSH, certifique-se de conferir o artigo de documentação da Microsoft sobre PowerShell Remoting over SSH.

#PS7Now Contributors

Esta postagem faz parte de uma série sobre o PowerShell 7 pelos excelentes colaboradores que você vê abaixo. Não deixe de conferir as postagens deles e ver o que estão fazendo em seus blogs!

Author Twitter Blog
Josh King @WindosNZ https://toastit.dev/
Adam Bertram @adbertram https://adamtheautomator.com/
Jonathan Medd @jonathanmedd
Thomas Lee @doctordns https://tfl09.blogspot.com/
Prateek Singh @singhprateik https://ridicurious.com
Dave Carroll @thedavecarroll https://powershell.anovelidea.org/
Dan Franciscus @dan_franciscus https://winsysblog.com/
Jeff Hicks @jeffhicks https://jdhitsolutions.com
Josh Duffney @joshduffney http://duffney.io/
Mike Kanakos @MikeKanakos https://www.networkadm.in/
Tommy Maynard @thetommymaynard https://tommymaynard.com//
#PS7Now Contributors

Source:
https://adamtheautomator.com/powershell-ssh/