Windows: Per Remotedesktopverbindung auf die Konsole verbinden

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-Komponenten - 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:00000001

Mögliche Werte für „Shadow“:

  • No remote control allowed (corresponds to the value of the registry key Shadow = 0);
  • Full Control with user’s permission (1);
  • Full Control without user’s permission (2);
  • View Session with user’s permission (3);
  • View Session without user’s permission (4).

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

Quelle: Windows OS Hub – How to Shadow (Remote Control) a User RDP session on RDS Windows Server 2016 / 2012 R2

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.

Windows 8.1 (with Bing)
Funktioniert.

Windows 8.1 Pro
Ungetestet, sollte funktionieren. Funktioniert. Erfolgreich am 30.10.2018 getestet.

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.

Update 18.10.2018

Kleine Verbesserungen im Beitrag. Leider ist es nicht möglich eine *.rdp-Datei für die Spiegelung zu verwenden, ferner gibt es keine Speicheroption für Benutzername und Kennwort:

Bei häufigen Zugriffen ist das sehr störend. Abhilfe kann man durch ein kleines AutoIt-Skript schaffen, das kurz vor der Remotedesktopverbindung gestartet wird und automatisch die Eingabefelder bei der Anmeldung ausfüllt:

; AutoIt TrayIcon ausblenden

#NoTrayIcon

; Auf das Fenster mit dem Titel "Windows-Sicherheit" warten

WinWait("Windows-Sicherheit")

WinActivate("Windows-Sicherheit")

; Benutzername und Kennwort eingeben

Send("Administrator")
Send("{TAB}")
Send("<Kennwort>")
Send("{ENTER}")

„<Kennwort>“ durch das Eigene ersetzen, anschließend das Skript mit „Aut2exe.exe“ kompilieren, das bringt etwas rudementäre Sicherheit, da das Kennwort in der daraus resultierenden *.exe-Datei nicht ganz so leicht auszulesen ist. Dann z.B. mit Hilfe eines kleinen Batch-Skripts die „Anmeldehilfe“ und die Remotedesktopverbindung starten:

@echo off

start Anmeldehilfe.exe

mstsc.exe /v:<IP/Hostname> /shadow:<ID> /control /noconsentprompt /prompt

3 Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.