SSH e PowerShell: Configurar Cliente SSH no Windows

Era uma vez, você estava limitado ao tipo de computadores aos quais poderia se conectar com o Windows PowerShell usando Remoting do PowerShell. Como o Remoting do PowerShell só suportava o fornecedor 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 SSH e Remoting do PowerShell.

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

Antes de Começar

Este artigo será um tutorial passo a passo. Se você pretende acompanhar, certifique-se de atender aos seguintes pré-requisitos:

  • Windows 10 – Todos os exemplos usarão o Windows 10 Build 1903. O exemplo estará no mesmo domínio que o servidor remoto do Windows.
  • 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ê primeiro precisará 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.

Adicione 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 do OpenSSH (ssh.exe) no PATH 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 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 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 foi encerrada com a mensagem de erro: solicitação de subsistema falhou no canal 0.

Observe que se você não estiver conectando a uma máquina com o Windows Server, não será necessário realizar essas etapas.

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

Override Default of no Subsystems

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

Subsystem	powershell pwsh.exe -sshs -NoLogo -NoProfile

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

Get-Service -Name sshd | Restart-Service

Depois que o serviço reiniciar, agora você deverá ser capaz de 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 WsMan. Para substituir o padrão, use o parâmetro SSHTransport para indicar que deseja se conectar via SSH e PowerShell.

Ao tentar se conectar pela primeira vez com um nome de usuário e senha, você precisará criar uma chave privada SSH. Para fazer isso, você será solicitado como pode ver 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, o PowerShell Remoting 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ê deve estar em um prompt familiar de PowerShell Remoting.

Powershell Remoting Prompt

Agora saia da sessão com exit e então experimente New-PSSession. Observe abaixo que usando 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 SSH. Você pode, em vez disso, usar um arquivo de chave privada e usar o parâmetro KeyFilePath para fornecer o local.

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 SSH com o PowerShell Remoting. Uma vez configurado, a única diferença entre usar o WsMan como protocolo de transporte e SSH são alguns parâmetros!

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

#ContribuidoresPS7Agora

Esta postagem fazia parte de uma série sobre o PowerShell 7 pelos excelentes contribuidores que você vê abaixo. Certifique-se de conferir suas postagens e ver o que eles 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/