Uma das grandes vantagens da forma como o PowerShell mudou nos últimos anos é que ele está adotando muitas maneiras de interagir com máquinas não-Windows. Uma dessas mudanças foi dar suporte ao PSRemoting via SSH. O PSRemoting via SSH também significa ter o PSRemoting no Linux!
Embora configurar o PSRemoting para funcionar com SSH e Linux exija um pouco de configuração para funcionar, isso permite que você use o PowerShell para interagir nativamente com máquinas Linux.
Neste tutorial, você aprenderá como configurar um cliente Windows para se conectar a um computador Linux (CentOS) usando PSRemoting via SSH e vice-versa. Você aprenderá como autenticar usando uma senha e 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) em seu cliente Windows. Para fazer isso, você precisará instalar e configurar tanto o PowerShell 7+ quanto o OpenSSH.
Instalando o PowerShell 7+
Primeiro, instale o PowerShell 7+. Este tutorial não abordará 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 Linux remoto. 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 conectando do Windows Server para o Linux, você só precisa do cliente OpenSSH. Se estiver 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 começando com OpenSSH e os instala, portanto, instalará tanto o cliente quanto o servidor.
Se você quiser instalar apenas o cliente, altere o filtro no bloco de script
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
Depois 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 ouvir na porta. Para iniciar o servidor OpenSSH no Windows Server, execute o seguinte comando PowerShell para iniciar o servidor OpenSSH e configurar o serviço para iniciar na inicialização.
Configurando a Configuração do OpenSSH
O próximo passo é modificar o arquivo de configuração do daemon sshd, 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. Mais adiante no tutorial, você aprenderá como configurar a autenticação SSH usando certificados.
- 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 está 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 direitos autorais ao iniciar, o que garante 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 do (cliente) e para (servidor) a este servidor Windows usando PSRemoting sobre SSH.
Configurando Linux (Servidor) para PSRemoting via SSH
Em seguida, vamos configurar 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 você 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 o 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 por:
- Abrindo o arquivo sshd_config executando
sudo vi /etc/ssh/sshd_config
.
2. Adicionando o subsistema do PowerShell, assim como 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 mudanças executando sudo systemctl restart sshd
.
Por padrão, a autenticação por senha e chave pública estará habilitada na maioria das instâncias, incluindo o CentOS 8. Não há necessidade de adicioná-las aqui.
Conectando de/para Windows/Linux com Autenticação por Senha
Depois de configurar tudo tanto nas máquinas Linux quanto Windows, é hora de colocar esse trabalho em prática. Vamos agora tentar conectar do Windows para o Linux e vice-versa usando autenticação por 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
por:
- Abrir o console do PowerShell 7.
2. Configurar parâmetros para o cmdlet Invoke-Command
. Neste caso, os parâmetros abaixo se conectarão a um computador chamado SRV1 usando uma conta de usuário local no SRV1 chamada User.
3. Executar Invoke-Command
espalhando os parâmetros acima e executando um comando (neste caso, Get-Process
) dentro de um bloco de script.
Relacionado: PowerShell Splatting: O que é e como funciona?
Em seguida, você deve 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 e interativamente executar comandos através de:
- Fornecendo os parâmetros acima e passando-os para o cmdlet
New-PSSession
.
2. Conectando-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 senha do usuário. Depois de autenticado, você estará conectado à outra máquina dentro do PowerShell.
Observe que nenhum dos comandos acima exigia o parâmetro comum Credential
para fornecer um nome de usuário e senha para conectar. 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, então 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 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, esteja criptografada dentro da conexão SSH, o servidor recebe a senha em texto simples. Se o servidor estiver comprometido de alguma forma, isso pode se tornar um problema de segurança.
Gerando Chaves Públicas/Privadas
Ao usar autenticação de chave pública de qualquer tipo, você deve primeiro gerar uma chave pública a partir do 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
ssh-keygen
no Linux, saiba que ele gerará um par de chaves RSA por padrão. Muitos sistemas operacionais Linux mais recentes 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 senha para criptografar a chave privada. Caso não queira fornecer uma senha durante a autenticação, pode deixar a senha em branco.
3. Apenas para Windows: Execute os comandos abaixo no PowerShell, onde <ProfilePath>
é o caminho do seu perfil (provavelmente C:\Users\NomeDoUsuario).
A implementação do OpenSSH do Windows possui um serviço ssh-agent que permite armazenar chaves privadas no contexto de segurança do Windows do usuário logado. Isso permite importar sua chave privada SSH para o ssh-agent e, em seguida, excluir a chave do sistema de arquivos para aumentar sua segurança.
4. Agora copie a chave pública gerada (<diretório inicial do usuário>\.ssh\id_ed25519.pub) para o servidor com o qual você deseja se conectar. O Windows não possui uma ferramenta para fazer essa cópia, então ela pode ser feita 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 logado. Após inserir, o PowerShell/Bash copiará a chave e você será desconectado da máquina remota.
Conexão de/para Windows/Linux com autenticação de chave pública
Após configurar as chaves pública e privada, conectar de/para o Windows e o Linux deve ser fácil. É praticamente idêntico à autenticação baseada em senha.
Para conectar com uma chave pública no Windows, use os mesmos comandos mostrados em Comandos de Conexão acima. Você só notará uma diferença: não será solicitada a autenticação.
Abaixo está um exemplo de conexão do Linux para o Windows usando a opção -v
para ver o que está acontecendo durante a conexão.

-v
switch