Haben Sie schon einmal versucht, auf eine entfernte Ressource innerhalb einer PowerShell-Remoting-Sitzung zuzugreifen, nur um auf ein frustrierendes Zugriffsverweigerungsproblem zu stoßen? Dieses häufige Problem, bekannt als das „Double-Hop“-Problem, verhindert, dass Sie von Ihrer aktuellen Sitzung aus auf einen zweiten Remote-Computer zugreifen.
Die gute Nachricht? Es gibt Möglichkeiten, das Double-Hop-Problem zu lösen, ohne übermäßig komplexe Konfigurationen vorzunehmen. In diesem Tutorial erstellen Sie eine benutzerdefinierte Sitzung, die die Authentifizierung nahtlos handhabt, was Ihnen Zeit und Mühe spart und gleichzeitig die Sicherheit gewährleistet.
Überwinden Sie Double-Hops mit Sitzungs-Konfigurationen und optimieren Sie Ihren Workflow!
PowerShell als ein anderer Benutzer ausführen
Wenn Sie mit Skripten arbeiten, die eine Verbindung zu entfernten Ressourcen herstellen, könnten Sie auf das Double-Hop-Problem stoßen. Dieses Problem tritt auf, wenn Ihre Anmeldeinformationen über den ersten Hop in einer Remote-Verbindung hinaus nicht authentifiziert werden.
Betrachten Sie beispielsweise ein Skript, das Unterverzeichnisse auf einem Remote-Computer mithilfe eines UNC-Pfads zählt:
(Get-ChildItem -Path \\SRV2\c$ -Directory).Count
Wenn Sie als Benutzer angemeldet sind, der nicht über die Berechtigung zum Zugriff auf eine Ressource verfügt, können Sie PowerShell unter einem anderen Benutzerkonto ausführen:
- Suchen Sie im Startmenü nach PowerShell.
- Klicken Sie mit der rechten Maustaste auf die PowerShell-Verknüpfung und wählen Sie Dateispeicherort öffnen.
- Halten Sie im Datei-Explorer die Umschalttaste gedrückt, klicken Sie mit der rechten Maustaste auf die Verknüpfung und wählen Sie Als anderer Benutzer ausführen.
- Geben Sie die Anmeldeinformationen eines Benutzers mit den erforderlichen Berechtigungen ein.
Nachdem Sie PowerShell als ein anderer Benutzer gestartet haben, sollte der Befehl jetzt erfolgreich sein:
(Get-ChildItem -Path \\SRV2\c$ -Directory).Count
Hinweis: Wenn Sie häufig Befehle mit unterschiedlichen Anmeldeinformationen ausführen, sollten Sie in Betracht ziehen, das Start-Process
Cmdlet mit dem -Credential
Parameter zu verwenden. Dieser Ansatz ermöglicht es Ihnen, neue PowerShell-Sitzungen direkt von der Konsole mit alternativen Anmeldeinformationen zu öffnen.
Testen von Remoteverbindungen
Sie können möglicherweise lokal auf eine Remote-Ressource zugreifen, wie z. B. einen freigegebenen Ordner, wenn Sie mit mehreren Remote-Systemen arbeiten. Doch dann stellen Sie fest, dass derselbe Befehl einen „Zugriff verweigert“-Fehler erzeugt, wenn er von einem zweiten Remote-Computer ausgeführt wird.
Diese Inkonsistenz kann verwirrend sein, insbesondere wenn Sie sich sicher sind, dass Ihre Anmeldeinformationen über ausreichende Berechtigungen verfügen.
Um Ihre Remoteverbindungen zu testen, stellen Sie eine Sitzung mit einem anderen Computer her:
Enter-PSSession -ComputerName SRV3
Sobald Sie verbunden sind, versuchen Sie, denselben Befehl auf der zweiten Maschine auszuführen:
(Get-ChildItem -Path \\SRV2\c$ -Directory).Count
Dieser Test führt oft zu einem „Zugriff verweigert“-Fehler, selbst wenn Sie ein Konto mit Berechtigungen verwenden.
Bestätigen Sie Ihren aktuellen Benutzer mit Folgendem:
whoami
Dieses Verhalten (Double-Hop) tritt auf, weil PowerShell Ihre Anmeldeinformationen nicht an den nächsten Hop übergibt. Dieses Mechanismus ist ein Sicherheitsmerkmal, das in die Kerberos-Authentifizierung integriert ist, kann jedoch ein großes Problem darstellen, wenn Sie mehrere Systeme verwalten.
Das Double-Hop-Problem mit Sitzungs-Konfigurationen lösen
Eine Lösung für das Double-Hop-Problem besteht darin, eine Sitzungs-Konfiguration auf dem Zwischencomputer zu erstellen.
Beginnen Sie damit, eine Sitzungs-Konfiguration auf dem Computer zu registrieren, mit dem Sie sich verbinden, in diesem Fall SRV3.
Der folgende Befehl:
- Weist der Sitzungs-Konfiguration einen
Namen
zu (z.B.Admin
). - Legt das Konto (
RunAsCredential
) fest, unter dem die Sitzungen ausgeführt werden. - Stellt sicher (
Force
), dass die Konfiguration angewendet wird und startet den WinRM-Dienst neu.
Invoke-Command -ComputerName SRV3 -ScriptBlock { Register-PSSessionConfiguration -Name Admin -RunAsCredential 'psforsysadmins.local\adam' -Force }
PowerShell fordert Sie zur Eingabe des Passworts für das RunAsCredential
-Konto auf, das sicher auf dem Remote-Computer gespeichert wird. Sobald die Konfiguration registriert ist, wird der WinRM-Dienst neu gestartet und die Sitzung wird geschlossen.
Mit der vorhandenen Konfiguration können Sie sich jetzt mit dem ConfigurationName
-Parameter verbinden:
Invoke-Command -ComputerName SRV3 -ScriptBlock { (Get-ChildItem -Path \\SRV2\c$ -Directory).Count } -ConfigurationName Admin
Dieser Befehl führt die gleiche Operation wie zuvor aus. Er gibt jedoch die Admin
-Sitzungskonfiguration an, die unter dem angegebenen Administratorkonto ausgeführt wird.
Tip: Beschränken Sie den Zugriff auf die Sitzungskonfiguration, indem Sie benutzerspezifische oder gruppenspezifische Zugriffsberechtigungen mit dem Set-PSSessionConfiguration
-Cmdlet definieren. Dadurch wird sichergestellt, dass nur autorisierte Benutzer die Konfiguration nutzen können.
Fazit
In diesem Leitfaden haben Sie das Double-Hop-Problem in PowerShell-Remoting gesehen und gelöst. Das Einrichten einer Sitzungs-Konfiguration kann das Double-Hop-Problem lösen und sicherstellen, dass Anmeldeinformationen sicher übergeben werden.
Diese Lösung ist persistent, sodass Sie die Konfiguration auch nach Neustarts wiederverwenden können, was einen robusten Ansatz zur Verwaltung von Remote-PowerShell-Sitzungen darstellt. Jetzt können Sie mehrstufige Remote-Operationen sicher verwalten und Arbeitsabläufe optimieren, ohne die Sicherheit zu gefährden.
Von hier aus sollten Sie in Erwägung ziehen, erweiterte Sicherheitsoptionen zu erkunden, wie z. B. die Einschränkung des Sitzungszugriffs oder die Implementierung einer zertifikatbasierten Authentifizierung. Diese Verbesserungen können Ihre Remoting-Konfiguration weiter stärken und gleichzeitig komplexe Umgebungen flexibel verwalten.
Source:
https://adamtheautomator.com/powershell-double-hop-fix/