From a36fcec57ee0cc1bbd0fd09c39860946560599d9 Mon Sep 17 00:00:00 2001 From: D4rkst3r Date: Thu, 13 Aug 2026 01:33:03 +0200 Subject: [PATCH] fix: kein Fenster OHNE Administratorrechte -- VBS-Starter statt S4U Der S4U-Weg aus dem letzten Commit war richtig gedacht und praktisch unbrauchbar: das Eintragen einer S4U-Aufgabe braucht erhoehte Rechte, und in einem gewoehnlichen PowerShell-Fenster scheitert es mit "Zugriff verweigert". Ein Werkzeug, das Administratorrechte verlangt, benutzt am Ende niemand -- und genau darum ging es ja: was umstaendlich ist, wird umgangen. Jetzt startet die Aufgabe wscript.exe mit einem winzigen VBS, und dessen Run-Aufruf hat den Fenstermodus 0. Das heisst wirklich unsichtbar, im Unterschied zu "-WindowStyle Hidden", das bei Konsolenprogrammen in einer interaktiven Sitzung nur halb wirkt. Besondere Rechte braucht es nicht, weil nichts Besonderes passiert. Der Anmeldetyp bleibt damit Interactive; das Fenster verhindert der Starter und nicht der Anmeldetyp. Das Protokoll aus dem letzten Commit bleibt und wird jetzt erst recht gebraucht: sichtbar ist nichts mehr, also muss nachlesbar sein, was ssh sagt. Co-Authored-By: Claude Opus 5 --- tools/tunnel-einrichten.ps1 | 42 ++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/tools/tunnel-einrichten.ps1 b/tools/tunnel-einrichten.ps1 index 8d69c06..6fb8b6e 100644 --- a/tools/tunnel-einrichten.ps1 +++ b/tools/tunnel-einrichten.ps1 @@ -149,25 +149,33 @@ Unregister-ScheduledTask -TaskName $AufgabenName -Confirm:$false -ErrorAction Si $pwsh = (Get-Command pwsh.exe -ErrorAction SilentlyContinue).Source if (-not $pwsh) { $pwsh = (Get-Command powershell.exe).Source } -$aktion = New-ScheduledTaskAction -Execute $pwsh ` - -Argument "-NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File `"$skript`"" -$ausloeser = New-ScheduledTaskTrigger -AtLogOn -User "$env:USERDOMAIN\$env:USERNAME" +# EIN VBS-STARTER ALS ZWISCHENSCHICHT, und der Umweg hat zwei Gruende. +# +# 1. "-WindowStyle Hidden" versteckt ein Konsolenprogramm nur halb. Die Aufgabe +# lief interaktiv in der Anmeldesitzung, bekam dort ein Fenster -- und wer +# es zumacht, kappt den Tunnel, ohne zu wissen was er tut. +# 2. Der naheliegende Ausweg, die Aufgabe per S4U ausserhalb der Sitzung laufen +# zu lassen, braucht erhoehte Rechte. In einem gewoehnlichen Fenster +# scheitert das Eintragen mit "Zugriff verweigert" -- und ein Werkzeug, das +# Administratorrechte verlangt, benutzt am Ende niemand. +# +# wscript.exe startet mit Fenstermodus 0, und das heisst wirklich unsichtbar. +# Es braucht keine besonderen Rechte, weil nichts Besonderes passiert. +$starter = Join-Path $ordner 'tunnel.vbs' +@" +' Erzeugt von tunnel-einrichten.ps1. Startet den Tunnel OHNE Fenster. +' Die 0 im Run-Aufruf ist der ganze Trick: Fenstermodus "unsichtbar". +Set sh = CreateObject("WScript.Shell") +sh.Run """$pwsh"" -NoProfile -NonInteractive -ExecutionPolicy Bypass -File ""$skript""", 0, False +"@ | Set-Content -Path $starter -Encoding ASCII -# S4U statt Interactive -- DAS ist der Unterschied zwischen "kein Fenster" und -# "ein Fenster, das man versehentlich zumacht". -# -# Bei -LogonType Interactive laeuft die Aufgabe IN der Anmeldesitzung. Ein -# Konsolenprogramm bekommt dort ein Fenster, und "-WindowStyle Hidden" hilft -# nur halb: es blieb sichtbar, und wer es schliesst, kappt den Tunnel, ohne zu -# wissen was er tut. Genau so ist es passiert. -# -# S4U ("Service for User") laeuft ausserhalb der Sitzung -- es gibt gar keinen -# Bildschirm, auf dem etwas erscheinen koennte. Auf lokale Dateien darf es -# weiterhin zugreifen, und mehr braucht der Schluessel unter %USERPROFILE% -# nicht. Ein Passwort muss dafuer nirgends gespeichert werden. -$prinzipal = New-ScheduledTaskPrincipal -UserId "$env:USERDOMAIN\$env:USERNAME" -LogonType S4U -RunLevel Limited +$aktion = New-ScheduledTaskAction -Execute "$env:SystemRoot\System32\wscript.exe" -Argument "`"$starter`"" +$ausloeser = New-ScheduledTaskTrigger -AtLogOn -User "$env:USERDOMAIN\$env:USERNAME" +# Interactive und NICHT S4U: S4U braucht Administratorrechte zum Eintragen. +# Das Fenster verhindert der VBS-Starter, nicht der Anmeldetyp. +$prinzipal = New-ScheduledTaskPrincipal -UserId "$env:USERDOMAIN\$env:USERNAME" -LogonType Interactive -RunLevel Limited $optionen = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries ` - -ExecutionTimeLimit ([TimeSpan]::Zero) -RestartCount 999 -RestartInterval (New-TimeSpan -Minutes 1) + -ExecutionTimeLimit ([TimeSpan]::Zero) Register-ScheduledTask -TaskName $AufgabenName -Action $aktion -Trigger $ausloeser ` -Principal $prinzipal -Settings $optionen `