Uma das grandes coisas sobre como o PowerShell mudou ao longo dos últimos anos é que ele está adotando muitas maneiras de interagir com máquinas não-Windows. Uma dessas mudanças foi o suporte ao PSRemoting via SSH. PSRemoting via SSH também significa ter PSRemoting no Linux!
Ao configurar o PSRemoting para funcionar com SSH e Linux, é necessário um pouco de configuração para fazer funcionar, isso permite que você use o PowerShell para interagir com máquinas Linux nativamente.
Neste tutorial, você vai aprender como configurar um cliente Windows para se conectar a um computador Linux (CentOS) usando PSRemoting via SSH e vice-versa. Você vai aprender como autenticar usando tanto uma senha quanto usando um certificado.
Relacionado: PowerShell Remoting: O Guia Definitivo
Pré-requisitos
Este tutorial será passo a passo. Se você quiser acompanhar, certifique-se de ter o seguinte com antecedência:
- A Windows 10 build 1809 or greater machine. The tutorial will use Windows Server 2019 Standard as the remote server.
- A Linux machine that supports PowerShell 7. The tutorial will use CentOS 8.
- Direitos de sudo na máquina Linux e direitos de administrador local na máquina Windows. Após a configuração inicial, alguns dos direitos podem ser revogados.
Configurando o Windows (Cliente) para PSRemoting via SSH
Primeiro, você precisa configurar o cliente PSRemoting (PowerShell) no seu cliente Windows. Para fazer isso, você precisará configurar e configurar tanto o PowerShell 7+ quanto o OpenSSH.
Instalando o PowerShell 7+
Primeiro, instale o PowerShell 7+. Este tutorial não cobrirá como fazer isso. Para aprender como, confira o link abaixo.
Instalando o OpenSSH
Você também precisará instalar o OpenSSH. O OpenSSH é o pacote que o PSRemoting usará para se conectar ao computador remoto Linux. Você pode instalar o OpenSSH via PowerShell usando o cmdlet Get-WindowsCapability
, conforme mostrado abaixo.
Dependendo se você pretende que seu host Windows seja um cliente e/ou um servidor, depende do recurso do Windows que você deve instalar. Se você estiver se conectando do Windows Server para o Linux, você só precisa do cliente OpenSSH. Se estiver se conectando do Linux para o Windows Server, você só precisa do servidor OpenSSH.
O comando abaixo encontra todos os recursos do Windows com um nome que começa com OpenSSH e os instala, assim, instalará tanto o cliente quanto o servidor.
Se você quiser instalar apenas o cliente, altere o filtro no bloco de script do
Where-Object
paraOpenSSH.Client*
e para o servidor, o filtro deve serOpenSSH.Server*
.
Relacionado: Começando a usar SSH e PowerShell
Iniciando o Servidor SSH
Assim que o OpenSSH for instalado, ele abrirá o firewall do Windows na porta 22, mas não iniciará o serviço do servidor OpenSSH para escutar na porta. Para iniciar o servidor OpenSSH no Windows Server, execute o seguinte comando no PowerShell para iniciar o servidor OpenSSH e definir o serviço para iniciar no boot.
Configurando a Configuração do OpenSSH
O próximo passo é modificar o arquivo de configuração do daemon sshd, o sshd_config. Dentro deste arquivo, você deve primeiro confirmar se a autenticação por senha está habilitada e também adicionar o subsistema PowerShell.
Esta parte do tutorial está configurando o método mais fácil usando senhas. Você aprenderá como configurar a autenticação SSH usando certificados mais tarde neste tutorial.
- Abra o arquivo de configuração no seu editor de texto favorito em C:\ProgramData\ssh\sshd_config.
2. Confirme se a autenticação por senha está habilitada, onde a linha PasswordAuthentication está comentada com um #
no início ou definida como yes
.

3. Adicione o subsistema PowerShell. Para o PowerShell 7, adicione a linha: Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo
.
- A opção
-sshs
é usada para permitir que o PowerShell 7 seja executado dentro do SSH como um subsistema. - A opção
-NoLogo
faz com que o PowerShell oculte as informações de copyright ao ser iniciado, garantindo que não haja saída inesperada ao iniciar a sessão SSH.
4. Salve e feche o arquivo de configuração.
5. Reinicie o serviço sshd do Windows. Você pode fazer isso com o PowerShell executando Restart-Service sshd
.
Agora você deve ter tudo configurado para se conectar de (cliente) e para (servidor) a este servidor Windows usando o PSRemoting sobre SSH.
Configurar o Linux (Servidor) para PSRemoting via SSH
A seguir está o Linux com uma configuração semelhante; instalando o PowerShell e configurando o OpenSSH.
Observe que, como estamos usando CentOS, alguns dos comandos podem ser diferentes se estiver usando uma distribuição diferente.
Instalando o PowerShell 7+
Primeiro, instale o PowerShell 7. Este tutorial não cobrirá como fazer isso. Em vez disso, certifique-se de verificar o seguinte link.
Relacionado: Como Baixar e Instalar o PowerShell 7 no Windows, macOS e Linux
Configurando o OpenSSH
Assim como no Windows Server, você precisará do OpenSSH. No entanto, ao contrário do Windows, o OpenSSH provavelmente já está instalado. Para este tutorial executando CentOS 8, a máquina Linux já tem tanto o cliente quanto o servidor instalados por padrão, mas você pode verificar usando o comando abaixo:
Se o cliente e o servidor estiverem instalados, você deverá obter algo semelhante à saída abaixo.

Configure o arquivo de configuração do SSH através de:
- Abrindo o arquivo sshd_config executando
sudo vi /etc/ssh/sshd_config
.
2. Adicionando o subsistema PowerShell da mesma forma que no Windows Server, adicionando a linha abaixo ao arquivo de configuração.
3. Saindo do vi e salvando o arquivo.
4. Reiniciando o daemon ssh para aplicar as alterações executando sudo systemctl restart sshd
.
Por padrão, a autenticação por senha e chave pública será habilitada na maioria dos casos, incluindo o CentOS 8. Não é necessário adicioná-las aqui.
Conectando de/para Windows/Linux com Autenticação de Senha
Depois de configurar tudo tanto nas máquinas Linux quanto Windows, é hora de colocar esse trabalho em prática. Vamos tentar agora conectar do Windows para o Linux e vice-versa usando autenticação de senha.
A autenticação baseada em senha parece e se sente familiar ao usar SSH com um nome de usuário e senha.
Comandos de Conexão
Para testar a conexão com PSRemoting via SSH do Windows para o Linux ou do Linux para o Windows, vamos usar tanto uma sessão “ad-hoc” usando o cmdlet Invoke-Command
quanto uma sessão persistente usando New-PSSession
.
Relacionado: Invoke-Command: A Melhor Maneira de Executar Código Remoto
Teste a conexão PSRemoting usando Invoke-Command
seguindo estes passos:
- 1. Abra o console do PowerShell 7.
2. Defina os parâmetros para o cmdlet Invoke-Command
. Neste caso, os parâmetros abaixo conectarão a um computador chamado SRV1 usando uma conta de usuário local em SRV1 chamada User.
3. Execute o Invoke-Command
“splatting” os parâmetros acima e execute um comando (neste caso, Get-Process
) dentro de um bloco de script.
Relacionado: PowerShell Splatting: O que é e como funciona?
Você deve então ver uma lista de todos os processos em execução no computador SRV1.
Você também pode estabelecer uma conexão persistente que permite conectar-se de forma interativa e executar comandos:
- Fornecendo os parâmetros acima e passando-os para o cmdlet
New-PSSession
.
2. Conectar-se a essa sessão de forma interativa usando o cmdlet Enter-PSSession
.
3. Após executar o comando Enter-PSSession
acima, você será solicitado a fornecer a senha do usuário. Depois de autenticado, você estará conectado à outra máquina dentro do PowerShell.
Observe que nenhum dos comandos acima exigiu o parâmetro comum Credential
para fornecer um nome de usuário e senha para a conexão. Em vez disso, usamos o parâmetro SSHTransport
. O SSH não usa o mesmo processo de autenticação que o Windows usa para ir de um computador Windows para outro, portanto, não pode interpretar objetos PSCredential.
Relacionado: Usando o cmdlet Get-Credential
do PowerShell e todas as coisas relacionadas a credenciais.
Usando essa abordagem, você também pode aproveitar sessões desconectadas.
Configurando a Autenticação Baseada em Chave Pública
Enquanto a autenticação baseada em senha é fácil de configurar e simples de usar, ela apresenta dois problemas.
- Não há maneira de autenticar sem que alguém execute manualmente os comandos de forma segura.
- Você está enviando uma senha pela rede.
Embora a senha, neste caso, seja criptografada dentro da conexão SSH, o servidor recebe a senha em texto simples. Se o servidor for comprometido de alguma forma, isso pode se tornar um problema de segurança.
Gerando Chaves Públicas/Privadas
Ao usar qualquer tipo de autenticação de chave pública, você deve primeiro gerar uma chave pública no cliente. Este requisito se aplica tanto ao Linux quanto ao Windows.
Em qualquer máquina do servidor Linux ou Windows:
- Execute
ssh-keygen
para gerar o par de chaves.
Se estiver executando o
ssh-keygen
no Linux, saiba que ele gerará um par de chaves RSA por padrão. Muitos novos sistemas operacionais Linux não permitirão o uso de pares de chaves RSA para autenticação por padrão. Para corrigir isso, usessh-keygen -t ed25519
.
2. Você será solicitado a fornecer um caminho para armazenar a chave privada e uma frase de senha para criptografar a chave privada. Caso não queira fornecer uma senha durante a autenticação, pode deixar a frase de senha em branco.
3. Apenas para Windows: Execute os comandos abaixo no PowerShell, onde <ProfilePath>
é o caminho para o seu perfil (provavelmente C:\Users\UserName).
A implementação do OpenSSH no Windows possui um serviço ssh-agent que permite armazenar chaves privadas dentro do Contexto de Segurança do Windows do usuário com o qual você está conectado. Isso permitirá que você importe sua chave privada SSH para o ssh-agent e, em seguida, exclua a chave do sistema de arquivos para protegê-la ainda mais.
4. Agora copie a chave pública gerada (<diretório inicial do usuário>\.ssh\id_ed25519.pub) para o servidor ao qual você deseja se conectar. O Windows não fornece uma ferramenta para fazer essa cópia, então ela pode ser concluída com o SCP. Execute o comando abaixo para copiar a chave pública para a máquina Linux.
Para copiar do Linux para o Windows:
5. Insira a senha do usuário conectado. Uma vez inserida, o PowerShell/Bash copiará a chave e você será desconectado da máquina remota.
Conectando de/para Windows/Linux com Autenticação de Chave Pública
Depois de configurar as chaves pública e privada, a conexão de/para o Windows e o Linux deve ser fácil. É quase idêntico à autenticação baseada em senha.
Para conectar com uma chave pública no Windows, use os comandos idênticos mostrados em Comandos de Conexão acima. Você notará apenas uma diferença; você não será solicitado a fornecer credenciais.
Abaixo está um exemplo de conexão do Linux para o Windows usando o switch -v
para ver o que está acontecendo durante a conexão.

-v
switch