Você já tentou acessar um recurso remoto dentro de uma sessão de Remoting do PowerShell e se deparou com um frustrante bloqueio de acesso negado? Este problema comum, conhecido como o problema do “double-hop”, impede que você acesse uma segunda máquina remota a partir da sua sessão atual.
A boa notícia? Existem maneiras de resolver o problema do double-hop sem configurações excessivamente complexas. Neste tutorial, você criará uma sessão personalizada que gerencia a autenticação de forma fluida, economizando tempo e esforço enquanto mantém a segurança.
Supere os double-hops com configurações de sessão e otimize seu fluxo de trabalho!
Executando o PowerShell como um Usuário Diferente
Se você estiver trabalhando com scripts que se conectam a recursos remotos, pode encontrar o problema do double-hop. Esse problema ocorre quando suas credenciais falham em se autenticar além do primeiro hop em uma conexão remota.
Por exemplo, considere um script que conta subdiretórios em um computador remoto usando um caminho UNC:
(Get-ChildItem -Path \\SRV2\c$ -Directory).Count
Se você estiver logado em um usuário que não tem permissão para acessar um recurso, pode executar o PowerShell sob uma conta de usuário diferente:
- Procure por PowerShell no menu Iniciar.
- Clique com o botão direito no atalho do PowerShell e selecione Abrir local do arquivo.
- No Explorador de Arquivos, mantenha a tecla Shift pressionada, clique com o botão direito no atalho e selecione Executar como usuário diferente.
- Digite as credenciais de um usuário com as permissões necessárias.
Após iniciar o PowerShell como um usuário diferente, o comando deve agora ter sucesso:
(Get-ChildItem -Path \\SRV2\c$ -Directory).Count
Dica: Se você executa comandos com credenciais diferentes com frequência, considere usar o cmdlet Start-Process
com o parâmetro -Credential
. Essa abordagem permite que você abra novas sessões do PowerShell diretamente do console com credenciais alternativas.
Testando Conexões Remotas
Você pode acessar um recurso remoto localmente, como uma pasta compartilhada, ao trabalhar com múltiplos sistemas remotos. Mas você então descobriu que o mesmo comando produz um erro de “acesso negado” quando executado (de um segundo computador remoto).
Essa inconsistência pode ser confusa, especialmente quando você está confiante de que suas credenciais têm permissões suficientes.
Para testar suas conexões remotas, estabeleça uma sessão com outro computador:
Enter-PSSession -ComputerName SRV3
Uma vez conectado, tente executar o mesmo comando na segunda máquina:
(Get-ChildItem -Path \\SRV2\c$ -Directory).Count
Esse teste frequentemente resulta em um erro de “acesso negado”, mesmo se você usar uma conta com permissões.
Confirme seu usuário atual com o seguinte:
whoami
Esse comportamento (double-hop) acontece porque o PowerShell não passa suas credenciais para o próximo salto. Esse mecanismo é um recurso de segurança embutido na autenticação Kerberos, mas pode ser uma grande dor de cabeça ao gerenciar múltiplos sistemas.
Resolvendo o Problema do Double-Hop com Configurações de Sessão
Uma solução para o problema do double-hop é criar uma configuração de sessão na máquina intermediária.
Comece registrando uma configuração de sessão no computador ao qual você está se conectando, neste caso, SRV3.
O seguinte comando:
- Designa um
Nome
à configuração da sessão (por exemplo,Admin
). - Especifica a conta (
RunAsCredential
) sob a qual as sessões serão executadas. - Garante (
Force
) que a configuração seja aplicada e reinicia o serviço WinRM.
Invoke-Command -ComputerName SRV3 -ScriptBlock { Register-PSSessionConfiguration -Name Admin -RunAsCredential 'psforsysadmins.local\adam' -Force }
O PowerShell solicita que você insira a senha da conta RunAsCredential
, que é armazenada de forma segura na máquina remota. Assim que a configuração é registrada, o serviço WinRM é reiniciado e a sessão é fechada.
Com a configuração em vigor, você pode agora se conectar usando o parâmetro ConfigurationName
:
Invoke-Command -ComputerName SRV3 -ScriptBlock { (Get-ChildItem -Path \\SRV2\c$ -Directory).Count } -ConfigurationName Admin
Este comando realiza a mesma operação que antes. No entanto, especifica a configuração da sessão Admin
, que é executada sob a conta de administrador especificada.
Dica: Limite o acesso à configuração da sessão definindo permissões de acesso específicas para usuários ou grupos usando o cmdlet Set-PSSessionConfiguration
. Fazer isso garante que apenas usuários autorizados possam utilizar a configuração.
Conclusão
Neste guia, você viu e resolveu o problema do duplo salto no PowerShell Remoting. Configurar uma configuração de sessão pode resolver o problema do duplo salto e garantir que as credenciais sejam transmitidas com segurança.
Esta solução é persistente, portanto, você pode reutilizar a configuração mesmo após reinicializações, tornando-a uma abordagem robusta para gerenciar sessões remotas do PowerShell. Agora, você pode gerenciar operações remotas de múltiplos saltos com confiança e otimizar fluxos de trabalho sem comprometer a segurança.
A partir daqui, considere explorar opções avançadas de segurança, como restringir o acesso à sessão ou implementar autenticação baseada em certificado. Essas melhorias podem fortalecer ainda mais sua configuração de acesso remoto enquanto gerenciam ambientes complexos de forma flexível.
Source:
https://adamtheautomator.com/powershell-double-hop-fix/