Назад | Перейти на главную страницу

Сценарий автоматической перезагрузки Windows 2000 Server

Я запускаю устаревшее сетевое приложение на устаревшей серверной ОС (Win2k Web Server), работающую за пределами площадки. Приложение является коммерческим (т. Е. У меня нет исходного кода) продуктом, выпуск которого был прекращен разработчиком, но моя компания по-прежнему полагается на него, потому что на рынке нет лучшего продукта для этого чрезвычайно нишевого продукта. Проблема в том, что он дает сбой каждые несколько дней и всегда в худшее время (выходные, 3 часа ночи и т. Д.), И мне приходится входить на сервер через RDC, перезагружать сервер и вручную перезапускать приложение после того, как сервер снова заработает. Сервер ничего не делает, кроме как размещает это приложение. Я пробовал его на win2k3, но он все равно вылетает, поэтому смена ОС не поможет.

Я пытаюсь автоматизировать этот сервер, чтобы перезагрузить его, а затем перезапустить приложение, когда он обнаружит, что приложение умерло. У меня есть способ определить, когда это приложение умерло, и в это время я могу запустить любой скрипт / exe. Приложение не может работать как служба (я чертовски пытался заставить это работать, но шансов нет). Он должен работать на рабочем столе пользователя RDC, и нет никакого способа обойти это, потому что мне нужно часто взаимодействовать с ним на рабочем столе. Так:

1: Распознать, когда приложение не работает (готово) 2: Автоматически перезагрузить сервер, когда это будет сделано (просто, готово) 3: Когда сервер завершит перезагрузку, откройте это приложение на рабочем столе RDC пользователя с уровнем администратора.

Мой формальный вопрос: как мне сделать №3?

Любой совет будет очень приветствоваться и оценен.

Я собираюсь сказать то, что говорили другие, но немного иначе, поскольку я проделал то же самое с парой ужасных программ (обе являются программами опроса часов - что это с программами, которые часы опроса - отстой?):

  • Войдите на серверный компьютер как пользователь, который будет запускать приложение. Установите безопасную заставку пользователя (т. Е. Требуется пароль). Вам, вероятно, следует использовать «пустой экран» для экономии ресурсов процессора.

  • Разместите ярлыки для своего сценария, чтобы запустить приложение и проверить его «работоспособность» в группе «Все пользователи» «Запуск». (Убедитесь, что ваш сценарий дает приложению достаточно времени для фактического запуска, прежде чем проверять, "мертвый" ли он.)

  • Возьмите копию "nircmd" из http://www.nirsoft.net/utils/nircmd2.html и закинуть в каталог% SystemRoot% \ System32 (ну или куда-нибудь, правда). Добавьте ярлык в группу «Все пользователи» «Автозагрузка» для вызова:

    Заставка% SystemRoot% \ system32 \ nircmd.exe

  • Добавьте следующие значения реестра, подставив соответствующие имя пользователя и пароль.

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
    AutoAdminLogon - REG_SZ - 1
    DefaultUsername - REG_SZ - Set to user name to logon with
    DefaultPassword - REG_SZ - Set to password to logon with
    DefaultDomain - REG_SZ - Set to either local machine's name if a local account is used to logon, or domain's name if a domain account is used to logon.
    ForceAutoLogon - REG_SZ - 1
  • Измените разрешение для ключа HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon (с помощью REGEDT32), чтобы удалить группы «Опытные пользователи» и «Пользователи» из ACL этого ключа. (Я только что протестировал это на машине W2K, и это не прерывает автоматический вход). Это предотвратит чтение пароля в открытом виде пользователем с ограниченным доступом на ящике.

На этом этапе компьютер загрузится и автоматически войдет в систему как пользователь, которого вы указали, запустит приложение и ваш «мертвый» скрипт и сразу перейдет в заблокированную заставку. Клавиша, удерживаемая во время загрузки, не остановит автоматический вход в систему (но, поскольку это находится за пределами сайта, мы надеемся, что клавиатура / мышь в любом случае защищены).

Если вы можете запустить его на W2K3, вы можете использовать аргумент «/ admin» или «/ console» в клиенте удаленного рабочего стола (в зависимости от того, какая у вас версия - введите «/?», Чтобы увидеть) для подключения к консоли. сеанс. Вам нужно будет войти в систему с тем же именем пользователя и паролем, что и для учетной записи автоматического входа, и никто без этого имени пользователя и пароля не сможет подключиться к сеансу консоли.

Если вам нужно продолжать запускать его на W2K, установите что-то вроде VNC, чтобы вы могли удаленно управлять сеансом консоли. Если вы все же используете VNC, обязательно измените разрешение в разделе реестра, в котором хранится конфигурация VNC компьютера (HKEY_LOCAL_MACHINE \ Software \ ORL \ Winvnc для более старых версий, другие места для более новых версий), чтобы удалить «Пользователи» и «Опытные пользователи. "из ACL ключа. Это предотвратит чтение пользователями с ограниченным доступом хэша пароля VNC, который можно легко превратить обратно в пароль VNC.

Вот как я это сделаю.

Ключевым моментом здесь является безопасность - короче говоря, вы не получите ее, если будете следовать этим инструкциям.

Шаги: 1. Автоматический вход. 2. Запустите командный файл (cmd), который запускает вашу программу при входе в систему.

Для автоматического входа - просто используйте TweakUI - это просто набор файлов реестра, но TweakUI - лучший способ написать их красиво.

Для пакетного файла просто напишите cmd-файл, который запускает вашу программу, и поместите его в папку «Запуск» в каталоге «Все пользователи».

Будут более изощренные способы сделать это, но этот низкотехнологичный механизм будет работать, но на 100% поставит под угрозу безопасность сервера!

Майк

Мы должны сделать это на нескольких сайтах, и мы используем автоматический вход, который предложил Майк.

Поскольку вы из Linux, возможно, стоит подчеркнуть, что автоматический вход в систему автоматически предоставляет имя пользователя и пароль для интерактивного сеанса при запуске сервера, то есть как если бы кто-то сидел на сервере, нажав ctrl-alt-delete и авторизовался на сервере. Затем приложение запускается из папки автозагрузки так же, как и для любого интерактивного пользователя.

NB RDC не участвует. Это интерактивный вход.

Очевидно, что теперь безопасности нет, потому что любой может подойти к серверу и начать печатать. Однако вы можете установить для заставки очень короткий тайм-аут, чтобы она быстро блокировала интерактивный сеанс. Единственная угроза безопасности заключается в том, что кто-то наблюдает за перезапуском сервера и может захватить его во время между автоматическим входом и включением экранной заставки.

JR

Как насчет размещения вашего приложения на виртуальном сервере; либо VMWare, либо Hyper-V и с использованием автоматического входа в систему, описанного Майком?

Я подумал об этом только после того, как опубликовал свой первый ответ, но если вы поместите свое приложение на виртуальный сервер, вы можете запустить его в интерактивном сеансе, и это не представляет опасности для безопасности, потому что у виртуальной машины нет клавиатуры и мыши.

JR

Популярной альтернативой RDP в этом сценарии является VNC, который позволяет подключаться к сеансу консоли независимо от того, вошел он в систему или нет.

Я считаю, что VNC может быть умеренно безопасным, в зависимости от того, какую версию вы используете, и это FLOSS.

  • Используйте TweakUI для создания автолога, локальной учетной записи не учетная запись домена.
  • Добавьте ярлык приложения в группу автозагрузки в меню «Пуск» учетной записи для автоматического входа.

Можешь попробовать TightVNC, UltraVNC, RealVNC, WinVNC...