Energiesschema remote ändern

Windows hat eine eigenartige Angewohnheit, selbst bei aktiven Zugriff auf Festplatten (z.B. per Netzwerkfreigabe) oder VMs (Hyper-V) welche aktiv etwas machen, wechselt Windows in den Sleep Modus, wenn der Energiesparmodus aktiviert ist. Das ist natürlich eher unpraktisch wenn man gerade dabei ist via Remote Desktop auf einer VM zu arbeiten und dann das Hostsystem in den Sleep Modus geht.

Um diesem Verhalten gegenzusteuern hab ich das kleine Tool Coffe gefunden, welches anhand von aktivem Netzwerktraffic den Server „wach“ hält. Da eine einfache RDP Session aber u.u. nicht gerade viel Traffic verursacht hab ich eine Option gesucht, wie ich schnell und einfach den Energieplan remote ändern kann.

Lokal ist das via powercfg bereits ohne Probleme möglich.

powercfg /SETACTIVE <GUID des Energieschemas>

Für die Steuerung von einem anderen Client aus, gibt es wie immer eine Reihe von Möglichkeiten z.B. via Powershell Remote oder psexec von Sysinternals.

Ich wollte jedoch eine Möglichkeit, wo ich:

  1. meine Zugangsdaten zum Server nicht eingeben oder hinterlegen muss.
  2. die Powershell des Servers nicht von extern erreichbar machen muss.
  3. nur powercfg ausgeführt werden darf.

openSSH Server

Die einfachste Möglichkeit ist openSSH zu verwenden. openSSH ist mittlerweile bei Windows 10 und Server 2019 mit dabei und für ältere Systeme, wie in meinem Fall Windows Server 2016, schnell nach installiert. Zudem bietet es die Möglichkeit das Energieschema auch von Linux oder Mac aus zu steuern.

Die Installation von openSSH auf Windows Server 2016 ist z.B. hier sehr gut beschrieben.

Zuerst passe ich die sshd_config an, damit man sich nur per Pubkey Authentication anmelden kann

PubkeyAuthentication yes
PasswordAuthentication no

Da es auf dem System sowieso nur einen Administrator gibt, deaktiviere ich noch die Verwendung der administrators_authorized_keys Datei.

#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys 

Anschließend lege ich mir unter meinem Account den .ssh Ordner an

C:\Users\Administrator>mkdir .ssh

Jetzt erzeuge ich mir ein ssh key pair (bewusst ohne Kennwort)

C:\Users\Administrator\ssh-keygen.exe

In dem Ordner ./ssh lege ich die Datei authorized_keys an. Hier werden nun über die Parameter vor dem Key Type und dem Puplic Key weitere Einschränkungen für das Key Pair definiert.

command="powercfg /SETACTIVE \"%SSH_ORIGINAL_COMMAND%\"",restrict ssh-rsa AAAAB3NzaC1yc2

1. command="powercfg /SETACTIVE \"%SSH_ORIGINAL_COMMAND%\"" definiert den Befehl welcher beim Verbinden ausgeführt wird. Weitere Infos hier.

2. über die Option restrict werden weitere Parameter Eingeschränkt u.a. das der User (no-pty) keine Shell bekommt, mehr dazu in der Beschreibung von sshd(8)

Ausführen vom Client

Auf dem Client benötigen wir nur einen SSH Client und den private Key.

Zudem muss man die GUID des entsprechenden Energieschemas kennen. Diese kann man sich mit dem Befehl powercfg /L auf dem Server ausgeben lassen.

Am Client kann man nun einfach mit folgenden zwei Batch Scripten den Energiesparplan auf dem Server ändern.

Schreibe einen Kommentar