Ad Widget

Collapse

Запуск exe приложения через скрипт

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • rukg
    Junior Member
    • Apr 2016
    • 11

    #1

    Запуск exe приложения через скрипт

    Добрый день!

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

    Создал скрипт, в поле "команда" поместил строку - c:\test.exe (пробовал и с кавычками и без). При принудительном запуске выдается ошибка - "Get value from agent failed: ZBX_TCP_READ() timed out"
    Увеличил параметр timeout до 30 и в конфиге сервера и в конфиге агента - не помогло.
    Заметил, что test.exe появляется в процессах, висит некоторое время и исчезает. Есть подозрение, что это из-за того что она запускается из под пользователя SYSTEM.
    Можно ли как-то указать имя пользователя от которого запускать приложение или я ошибся где-то в другом месте?
  • sadman
    Senior Member
    • Dec 2010
    • 1611

    #2
    Сдается мне, что запускается .exe из под пользователя, под которым Zabbix Agent висит в сервисах. Замените Account для сервиса.

    А так проблем с запуском экзешников не должно быть. У меня заббикс ложит виндовые сервера с помощью "shutdown.exe"

    Comment

    • rukg
      Junior Member
      • Apr 2016
      • 11

      #3
      Смена Account службы не помогло. Приложение так же появляется в процессах и через несколько секунд пропадает.

      Причем системные .exe типа shutdown.exe , iisreset.exe исполняются, а вот внешние приложения нет.

      Comment

      • yukra
        Senior Member
        • Apr 2013
        • 1359

        #4
        Originally posted by rukg
        Смена Account службы не помогло. Приложение так же появляется в процессах и через несколько секунд пропадает.

        Причем системные .exe типа shutdown.exe , iisreset.exe исполняются, а вот внешние приложения нет.
        А что за exe вы хотите запустить?
        Подозреваю что "shutdown.exe" не выключает ОС, а "посылает сигнал ОС на выключение" и сразу завершается. Ваше же приложение запускается и начинает что-то делать. Подозреваю что вам поможет то, что в линуксах называют "отвязаться от терминала", но не могу подобрать правильные слова для гугла в отношении windows.

        Comment

        • Kos
          Senior Member
          Zabbix Certified SpecialistZabbix Certified Professional
          • Aug 2015
          • 3404

          #5
          Originally posted by rukg
          Создал скрипт, в поле "команда" поместил строку - c:\test.exe (пробовал и с кавычками и без). При принудительном запуске выдается ошибка - "Get value from agent failed: ZBX_TCP_READ() timed out"
          Можно чуть подробнее, что именно, где и как Вы делаете? В частности, что подразумевается под принудительным запуском?

          Насколько я помню, необходимым условием для старта скрипта на агенте является работа агента в пассивном режиме. У вас это настроено? Можете ли обратиться к агенту, например, запуская на машине с Zabbix-сервером команду zabbix_get (взять с агента, для примера, значение ключа agent.version)?

          Разрешено ли на агенте удалённое выполнение команд (параметр EnableRemoteCommands в конфиге агента, а заодно и LogRemoteCommands=1)? Что при этом видно в логе агента?

          Comment

          • sadman
            Senior Member
            • Dec 2010
            • 1611

            #6
            Originally posted by yukra
            А что за exe вы хотите запустить?
            Подозреваю что "shutdown.exe" не выключает ОС, а "посылает сигнал ОС на выключение" и сразу завершается. Ваше же приложение запускается и начинает что-то делать. Подозреваю что вам поможет то, что в линуксах называют "отвязаться от терминала", но не могу подобрать правильные слова для гугла в отношении windows.
            Да, такая проблема еще в NT4 мне попадалась, кстати. Нужно было давать разрешение Interract to desktop некоторым самопальным "сервисам".

            Впрочем, ясно одно - проблема не с запуском, проблема с выполнением. Тот же самый повершелл.ехе вполне себе успешно выполняется.

            И пока неизвестно, кто такой test.exe - искать решение особого смысла нет.

            Comment

            • rukg
              Junior Member
              • Apr 2016
              • 11

              #7
              EnableRemoteCommands=1
              В лога ничего сверхъестественного.
              zabbix_get версию отдает.
              Под принудительном запуском - предполагалось, не запуск действия после условия, а просто запуск скрипта у узла сети.
              Команды типа shutdown.exe у меня отрабатывают, значит конфиги с обеих сторон настроены верно или я ошибаюсь?
              test.exe - c# приложение-заслонка, windows форма поверх всех окон.
              Чтобы исключить проблему приложения попробовал taskmgr.exe так же безуспешно.
              Так же заметил, что при запуске своего test.exe в процессах всплывает cmd.
              Может зря вообще копаем, если отойти от моего приложения, возможно ли удаленно через заббикс открыть на удаленной машине в visible mode допусти что-то типа word.exe , paint.exe или тот же диспетчер задач? Но нужен только способ который запускает по условию срабатывания триггера.
              Last edited by rukg; 17-06-2016, 21:19.

              Comment

              • sadman
                Senior Member
                • Dec 2010
                • 1611

                #8
                Originally posted by rukg
                Может зря вообще копаем, если отойти от моего приложения, возможно ли удаленно через заббикс открыть на удаленной машине в visible mode допусти что-то типа word.exe , paint.exe или тот же диспетчер задач?
                Это утопическая идея, насколько мне известно. То, что сервис запускается под учетной записью пользователя, не говорит о том, что он запускается в сеансе пользователя. Этот сервис просто наследует определенные права доступа к объектам.

                ------------
                Первый сеанс, созданный при загрузке операционной системы, именуется сеансом 0 или сеансом консоли. В версиях Windows, предшествующих Vista, в сеансе 0 выполняются службы и приложения, запускаемые первым пользователем, интерактивно зарегистрировавшимся в Windows. Однако запускать пользовательские приложения в сеансе 0 рискованно, так как в этом случае злоумышленник легко вмешается в функционирование привилегированных служб.
                Благодаря изоляции сеанса 0 в Server 2008 и Vista только службы Windows могут выполняться в сеансе консоли. Приложения, запущенные первым пользователем, который прошел интерактивную регистрацию, находятся в другом сеансе с именем «сеанс 1». Поэтому они не могут воздействовать на службы с высокими привилегиями. На рисунке показаны различия между архитектурой управления сеансами Windows XP и Windows Server 2003, с одной стороны, и Windows Server и Vista — с другой.
                В Server 2008 и Vista сеанс 0 также отмечен как неинтерактивный, то есть службы не могут напрямую связываться с пользователями (например, службы не могут выводить диалоговые окна, требующие ввода информации пользователем). В прошлом в ходе некоторых атак применялись возможности взаимодействия с пользователями интерактивных служб. Теперь службы, даже отмеченные как интерактивные или с установленным в свойствах службы параметром Allow service to interact with desktop, невидимы для пользователей. Службы будут функционировать, но пользователь в графической оболочке Windows их не увидит.
                ------------

                Comment

                • ArvdMax
                  Junior Member
                  • Jul 2016
                  • 1

                  #9
                  Originally posted by rukg
                  Добрый день!

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

                  Создал скрипт, в поле "команда" поместил строку - c:\test.exe
                  Я сделал через Psexec.exe.

                  Вот таким образом

                  c:\Psexec.exe \\ipкомпьютера -u домен\пользователь -p пароль c:\Alerter.exe

                  Все работает.

                  PsExec — утилита для удаленного запуска приложений.
                  Утилита в свободном доступе есть в интернете. Закинуть на диск c в корень и один раз запустить.

                  Comment

                  • rukg
                    Junior Member
                    • Apr 2016
                    • 11

                    #10
                    Опустим момент того чтобы приложение выполнялось на 1 уровне.
                    Столкнулся с другой проблемой. При обычно запуске команды на Zabbix Agent , неважно какого приложения, пусть то cmd,psexec. Оно запускается и начинает выполняться, я вижу данные приложения в tasklist, но через некоторое время оно закрывается. Timeout в конфиге влияет на сколько долго оно проработает. я так полагаю приложение пытается выполниться за время указанное в таймауте, если оно не укладывается в данный срок оно убивается.
                    Причем не важно, даже если я батником или psexec открываю другое приложение он закрывает все порожденную цепь.
                    Вопрос в следующим, можно ли как-то обойти данный способ работы, может есть какой-нибудь параметр,ключи - "не дожидаться завершения" (в батниках и psexec данные ключи не помогли).

                    Comment

                    • sadman
                      Senior Member
                      • Dec 2010
                      • 1611

                      #11
                      Т.е. если "форкнуть" процесс с помощью http://ss64.com/nt/start.html - он тоже убивается?

                      Comment

                      • rukg
                        Junior Member
                        • Apr 2016
                        • 11

                        #12
                        Originally posted by sadman
                        Т.е. если "форкнуть" процесс с помощью http://ss64.com/nt/start.html - он тоже убивается?
                        Да, для примера взял notepad.exe:
                        notepad.exe
                        start /W notepad.exe
                        C:\1.bat (где в батнике start /W notepad.exe - локально батник работает)
                        Во всех перечисленных случаях, процесс запущен ровно столько секунд сколько указано в параметре timeout в zabbix agent конфиге.

                        Comment

                        • sadman
                          Senior Member
                          • Dec 2010
                          • 1611

                          #13
                          Originally posted by rukg
                          Да, для примера взял notepad.exe:
                          notepad.exe
                          start /W notepad.exe
                          Кто же заставляет ставить /W?
                          Code:
                          start notepad.exe

                          Comment

                          • rukg
                            Junior Member
                            • Apr 2016
                            • 11

                            #14
                            Originally posted by sadman
                            Кто же заставляет ставить /W?
                            Code:
                            start notepad.exe
                            Эффект такой же, 30 сек по timeout и закрывается.

                            Comment

                            • sadman
                              Senior Member
                              • Dec 2010
                              • 1611

                              #15
                              Проверять не буду, хотя это и странно.

                              У system.run[] есть параметр "режим":
                              режим - один из wait (по умолчанию, ожидать завершения выполнения), nowait (не ожидать)
                              Может он поможет отцу русской демократии?

                              Comment

                              Working...