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? Esse problema comum, conhecido como “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 lida com autenticação de forma contínua, economizando tempo e esforço enquanto mantém a segurança.
Supere os double-hops com configurações de sessão e simplifique seu fluxo de trabalho!
Executando o PowerShell como um Usuário Diferente
Se você está 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ê está logado como um usuário que não possui permissão para acessar um recurso, você 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, segure Shift, clique com o botão direito no atalho e selecione Executar como um usuário diferente.
- Insira 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 ser bem-sucedido:
(Get-ChildItem -Path \\SRV2\c$ -Directory).Count
Dica: Se você executar comandos com diferentes credenciais 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 com sucesso um recurso remoto localmente, como uma pasta compartilhada, ao trabalhar com múltiplos sistemas remotos. Mas, então, você 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ê tem certeza 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 geralmente resulta em um erro de “acesso negado”, mesmo que você use 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 integrado à 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:
- Atribui 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 a você a senha para a conta RunAsCredential
, que é armazenada de forma segura na máquina remota. Uma vez que a configuração esteja registrada, o serviço WinRM é reiniciado e a sessão é encerrada.
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, ele 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
. Isso garante que apenas usuários autorizados possam aproveitar a configuração.
Conclusão
Neste guia, você viu e resolveu o problema do double-hop no PowerShell Remoting. Configurar uma configuração de sessão pode resolver o problema do double-hop e garantir que as credenciais sejam passadas de forma segura.
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/