Итак, резюмирую.
1. В рамках
SSH блокировать Windows возможно с помощью утилиты
tsdiscon с указанием локальной сессии
tsdiscon console
.
Несмотря на то, что SSH предоставляет полноценный доступ к консоли (cmd или PowerShell), выполнить вызов функции
LockWorkStation посредством команды
rundll32.exe user32.dll,LockWorkStation
через встроенный в Windows 10 OpenSSH сервер не представляется возможным (по крайней мере посредством службы sshd), т.к. данная функция требует
сессии рабочего стола, а SSH в данной сессии не стартует. До Windows 2003 (на Windows XP) функция отработает, поскольку там
the local desktop is running in session 0.
Т.е. до Висты данная команда выполняется под session 0 - в её рамках не было разделений между RDP, консолями, декстопами, службами. На текущий же момент session 0 является изолированной, неинтерактивной и предполагается для выполнение служб и системных процессов - в эту сессию, к сожалению, и попадает указанная выше команда (да и все команды выполненные через SSH, т.к. дочерний процесс у них служба sshd), я понимаю это так, но может неверно. Если что, вот
первоисточник (там поднимался ровно такой же вопрос).
Вероятно, как-то можно запускать OpenSSH сервер интерактивно, но я не разобрался как это сделать, да и не комильфо как-то держать сервер не в рамках службы.
2. В рамках
telnet'а
LockWorkStation выполняется успешно, т.к. telnet работает с десктопной сессией. Но проблема в том, что адекватного telnet-сервера под Windows 10 я не обнаружил. Есть вероятность, что telnet-сервер некогда был в каких-то Technical Preview Windows 10. К примеру,
тут пишут:
With build 9879 of Win 10 TP, Telnet Server is specifically removed
Т.е.
до билда 9879 Win 10 TP telnet-сервер должен быть. Я нашел на просторах билд 9841 (<9879), но там telnet-сервера не обнаружил. Попытался также завести telnet-сервер с Windows 8.1, но там разные импорты п, функции не обнаруживаются - не взлетит такой порт, в общем.
3. Как посоветовали выше, вариант с
расписанием. Т.е. необходимый скрипт (та же функция
LockWorkStation) выполняется при наличии того или иного файла в определенном месте, появление которого можно инициализировать через тот же SSH.
4. Также из совета выше: развернуть
веб-сервер с простым CGI и выполнять команду (ту же
LockWorkStation) при вызове конкретного URL.
Всех искреннее благодарю!