Das man bei Terminalservern (aka Remote Desktop Session Hosts) mit Hilfe der Remoteüberwachung oder dem Spiegeln auf Benutzersitzungen zugreifen kann ist soweit nichts neues und bekannt. Man kann allerdings unter bestimmten Voraussetzungen z.B. auch auf die Konsolensitzung eines Clients zugreifen.
Mit RDP Wrapper oder ähnlichen Tools die RDP-Möglichkeiten von z.B. Windows 7 aufzubohren ist soweit nichts unbekanntes. Neu für mich war die Möglichkeit sich direkt auf die Konsolensitzung, d.h. die Anzeige die man sieht wenn man vor dem Computer sitzt, aufschalten zu können.
Voraussetzungen
Zuallerst muss (natürlich) die Remotedesktopverbindung zugelassen bzw. aktiviert sein. Dies wird jetzt einfach mal vorausgesetzt und weiter beschrieben.
ID ermitteln
Neben RDP Wrapper und Co. benötigt man zum Verbinden auf die Konsole oder eine andere RDP-Sitzung die ID. Auf Windows Servern und bei den Pro-Ausgaben von Windows 7 und neuer steht dazu der Befehl
query session
zur Verfügung. Die Home-Ausgaben kennen diesen Befehl nicht, die entsprechenden Dateien lassen sich zwar auffinden, aber eine Ausführung wird unterbunden. Abhilfe schafft der Task-Manager, wenn man auf der Registerkarte „Benutzer“ die Spalte „ID“ einblendet:
By the way: Ein „query session“ aus der Ferne auf eine Home-Ausgabe von Windows habe ich nicht zum Laufen bekommen. Daran änderte auch ein
reg add "\\computername\HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v AllowRemoteRPC /t REG_DWORD /d 1
Quelle: spiceworks – remotely Identifying a logged on user using CMD
und entsprechende Firewall-Konfiguration nichts. Denkbar, das es dennoch irgendwie möglich ist. Ich bilde mir ein, die Ausgabe kurz aufblitzen gesehen zu haben, leider war’s nicht umleit- oder eine Pause erfolgreich hinzufügbar.
Alternativ kann man LogonSessions von Sysinternals nutzen. Allerdings ist dieses Tool im Vergleich zu „query session“ und dem Task-Manager um einiges gemächlicher. Ferner muss man aus der Ausgabe dann noch den passenden Absatz heraussuchen:
[6] Logon session 00000000:00011ed2: User name: <Computername\Username> Auth package: NTLM Logon type: Interactive Session: 1 Sid: <SID> Logon time: 09.10.2018 14:25:16 Logon server: <Logonserver> DNS Domain: UPN:
Man sucht den Benutzernamen und „Logon type: Interactive“, „Session“ entspricht dann der ID.
Spiegeln zulassen
In der Voreinstellung wird das Spiegeln erst gestattet, nachdem der angemeldete Benutzer gefragt wurde und zugestimmt hat. Ändern lässt sich das entweder via Gruppenrichtlinie oder in der Registry:
Computerkonfiguration - Administrative Vorlagen - Windows-Komponten - Remotedesktopdienste - Remotedesktopsitzungshost - Verbindungen
Die Richtlinie „Regeln für Remotesteuerung von Remotedesktopdienste-Benutzersitzungen festlegen“ editieren:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services] "Shadow"=dword:00000002
Per Vorgabe kann nur der Administrator sich zu einer anderen Sitzung hinzuschalten. Ändern kann man dies wie folgt (ungetestet):
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName=”RDP-Tcp”) CALL AddAccount “<Domain>\<Group>”,2
Firewall
Sofern über’s Netzwerk die Spiegelung erfolgen soll, muss neben dem RDP-typischen Port 3389/tcp und udp noch die folgenden Firewall-Regeln aktiv sein:
Datei- und Druckerfreigabe (SMB eingehend) Remotedesktop - Schatten (TCP eingehend) (heißt ggf. auch RDP-Sitzungs-Agent
Soll aus einem anderen Subnetz, z.B. via VPN, die Spiegelung erfolgen, muss man dies in den Regeln auf der Registerkarte „Bereich“ unter „Remote-IP-Adresse“ einstellen.
Bei den Home-Ausgaben von Windows gibt es keine vorbereite Regel „Remotedesktop – Schatten“. Diese kann man selbst erstellen für die Anwendung
"%SystemRoot%\system32\RdpSa.exe"
und „TCP – Alle Ports“ zulassen.
Das eigentliche Spiegeln
Aus der Administrator-Sitzung wird der Zugriff auf eine Benutzersitzung bzw. die Konsole wie folgt eingeleitet:
mstsc /v:<Hostname/IP/localhost> /shadow:<ID> /control
Ohne Nachfrage, sofern die Vorkonfiguration stimmt, geht’s mit dem Parameter “ /noconsentprompt“.
Die Sitzung mit der ID „1“ ist dabei oft der erste angemeldete Benutzer und im Idealfall ist das auf/an der Konsole:
Das ist aber nicht immer so, von daher am besten vorher die richtige ID ermitteln.
Aus der Ferne ohne (!) vorige Anmeldung als Administrator klappt’s dann mit dem Anhängen von „/prompt“ und der Eingabe der Administrator-Zugangsdaten:
mstsc /v:<Hostname/IP/localhost> /shadow:<ID> /control /noconsentprompt /prompt
Die Testreihe
Nachfolgend die bislang getesteten Windows-Ausgaben:
Windows 7 Home Premium & Professional
Fehlermeldung „Spiegelfehler – Die auf diesem Server ausgeführte Windows-Version unterstützt das Spiegeln von Benutzern nicht“. Kurzum: Diesen Windows-Ausgaben fehlt die Möglichkeit zu Spiegeln. Das war bei beim Server-Pendant (Windows Server 2008) ebenfalls so.
Windows 8.1 (with Bing)
Funktioniert.
Windows 8.1 Pro
Ungetestet, sollte funktionieren.
Windows 10
Ungetestet, sollte funktionieren.
Windows 10 Pro
Funktioniert.
Was nicht möglich ist
An der Konsole anmelden, wenn kein Benutzer angemeldet ist funktioniert nicht. Klar, wenn keine Sitzung vorhanden ist, kann auch nicht gespiegelt werden.
Mehrere Spiegelungen, d.h. das mehr als ein entsprechend berechtigter Benutzer sich zu einer Sitzung hinzuschalten kann, ist nicht möglich.
Abschlussbemerkung
Generell hilft es bei vielen Support-Themen bereits, wenn man sich parallel zum aktuellen Benutzer als Administrator zu einem System verbinden kann. So lässt sich einiges machen, ohne den Benutzer verscheuchen zu müssen.
Mich wundert es schon etwas, das Microsoft neben einer Benutzersitzung, ganz gleich ob diese lokal oder per RDP läuft, nicht noch eine Administrator-Sitzung auf den Clients zulässt. Ferner bietet die vorhandene Technik, gemeint ist das Spiegeln, in Verbindung mit VPN o.ä. eine super Alternative zu TeamViewer, VNC und Co.