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.
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.

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

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

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.

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.

Abaixo da linha existente do Subsystem, adicione o subsistema do PowerShell usando a linha abaixo:
Agora salve o arquivo ssh_config e reinicie o serviço do Windows sshd no servidor remoto do Windows, como mostrado abaixo.
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.

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.

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.

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 | 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// |