Что нового

Проверка логина и пароля для psexec

Tuxzer92

Новичок
Сообщения
64
Репутация
0
Здравствуйте, хочу сделать проверку логина и пароля локального администратора, которые вводятся при подключении к удаленному компьютеру.
Вот скрипт подключения:
Код:
Func Logon()
If (@error = 0) Then
	  $msg2 = "Введите пароль от локальной учетной записи администратора:"
   Else
	  $msg2 = "Неправильно, повторите:"
   EndIf
   $Login="Администратор"
   $Pass = InputBox("", $msg2, "", "*")
   If (@error = 1) Then
	  Exit
   EndIf
   ;MsgBox(0,"",$Connect)
   $Connect=RunWait("psexec.exe \\" & "pc-tv" & " -u " & $Login & " -p " & $Pass &" "& " ")
EndFunc
Logon()

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

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
$Msg = "Введите пароль от локальной учетной записи администратора:"
$Login = "Администратор"
$Pass = "ValidPass"
Do
  $Test = InputBox("", $Msg, "", "*")
  If @error Then Exit
Until $Pass == $Test
RunWait("psexec.exe \\" & "pc-tv" & " -u " & $Login & " -p " & $Pass)
 
Автор
T

Tuxzer92

Новичок
Сообщения
64
Репутация
0
Дело в том, что на компьютерах бывают разные пароли локальных администраторов. И админ их иногда меняет. И каждый раз прописывать все валидные пароли не вариант. Поэтому я и ищу способ, который бы работал без указания валидных паролей. Да и небезопасно это. Нужно именно посылать команду на удаленный пк с учетными данными локального администратора и ждать вывод. Если вывод = 0, то- ок, пароль и логин приняты, так как команда успешно выполнилась на удаленном пк от имени администратора, иначе команда возвратила другой код выхода, так как не смогла выполниться на удаленном пк из-за того что не правильно указаны логин и пароль и просить снова вводить логин и пароль, для повторной попытки выполнения команды с данными правами на удаленном пк. Т.е. выполнить такую команду, которая будет возвращать код выхода с которым уже можно будет работать.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
$Msg = "Введите пароль от локальной учетной записи администратора:"
$Login = "Администратор"
While 1
  $Pass = InputBox("", $Msg, "", "*")
  If @error Then Exit
  Switch RunWait("psexec.exe \\" & "pc-tv" & " -u " & $Login & " -p " & $Pass & " -d notepad.exe")
    Case 53
      ; Не найден сетевой путь.
      Exit MsgBox(0, "Error", "Не найден сетевой путь")
    Case 1326
      ; Вход в систему не произведен: имя пользователя или пароль не опознаны.
      ContinueLoop
  EndSwitch
WEnd



Добавлено:
Сообщение автоматически объединено:

Как вариант можно консольный вывод разбирать
Код:
$PID = Run("psexec.exe \\" & "pc-tv" & " -u " & $Login & " -p " & $Pass & " -d notepad.exe", "", Default, 8)
ProcessWaitClose($PID)
$out = StdoutRead($PID)

ConsoleWrite($out & @CRLF)
 
Автор
T

Tuxzer92

Новичок
Сообщения
64
Репутация
0
При выполнении скрипта не выполняется команда:
Код:
$Auth=RunWait($psexec & "\\" & $Host & " -u " & $Login & " -p " & $Pass & " cmd.exe /c ping 127.0.0.1 -n 1")

Т.е. msgbox(0,"",$Auth) говорит, что $Auth=0, но сама команда не выполнялась!

Сам скрипт:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ListBoxConstants.au3>
#include <EditConstants.au3>

$SrvHost = "fs-zvk"
$etc = @ScriptDir & "\etc\"
$Client = $etc & "Client.exe"
$psexec= $etc & "psexec.exe"
Local $Font = "Comic Sans MS", $Mylist
Const $Title= "Remote Assistance"
$UserName = "Администратор"
$Window = GUICreate($Title, 290, 440) ;Создаем окно
GUISetState(@SW_SHOW) ; показывает созданное окно
GUISetBkColor(0xE0FFFF)

GUICtrlCreateGroup("Введите имя компьютера или IP: ", 40, 5, 210, 60)

$InputHost = GUICtrlCreateInput('', 45, 28, 200, 22, $WS_BORDER)

GUICtrlCreateGroup("Введите логин и пароль Администратора: ", 30, 85, 230, 135)

GUICtrlCreateLabel ("Введите логин", 35, 107, 75)
GUICtrlCreateLabel ("Введите пароль", 35, 159, 81)
$InputLogin = GUICtrlCreateInput('', 35, 130, 220, 22, $WS_BORDER)
$InputPass = GUICtrlCreateInput('', 35, 180, 220, 22, BitOR($ES_PASSWORD, $WS_BORDER))

$OKButton = GUICtrlCreateButton("Запустить",40, 300, 70) ;Создание кнопок
$EXITButton = GUICtrlCreateButton("Выход", 180, 300, 70)

$DWButtonInstall = GUICtrlCreateCheckbox("Установка/Запуск службы DameWare", 40, 240, 210, 16)

$UVNCButtonInstall = GUICtrlCreateCheckbox("Установка/Запуск сервера UltraVNC", 40, 270, 210, 16)

$Mylist = GUICtrlCreateList("", 7, 343, 275, 80, $WS_BORDER+$WS_VSCROLL+$LBS_NOINTEGRALHEIGHT)

GUICtrlSetState($OKButton, $GUI_DISABLE)

Func SetButtonState()
   If GUICtrlRead($DWButtonInstall) = $GUI_CHECKED _
	  or GUICtrlRead($UVNCButtonInstall) = $GUI_CHECKED _
   Then
	  GUICtrlSetState($OKButton, $GUI_ENABLE)
   Else
      GUICtrlSetState($OKButton, $GUI_DISABLE)
   EndIf
EndFunc

; Запускается цикл опроса GUI до тех пор пока окно не будет закрыто
While 1
   Switch GUIGetMsg()
	  Case $GUI_EVENT_CLOSE
		 ExitLoop
	  Case $DWButtonInstall
		 SetButtonState()
	  Case $UVNCButtonInstall
		 SetButtonState()
	  Case $OKButton
		 $Host=GUICtrlRead($InputHost)
		 $Login=GUICtrlRead($InputLogin)
		 $Pass=GUICtrlRead($InputPass)
		 Start()
	  Case $EXITButton
		 Exit
   EndSwitch
WEnd

Func Start()
		 If $Host <> "" Then
			GUICtrlSetData($Mylist, "Компьютер: " & $Host)
			if $Login <> "" And $Pass <> "" Then
			   MsgBox(0,"","Не пустые")
			   Do
				  $Auth=RunWait($psexec & "\\" & $Host & " -u " & $Login & " -p " & $Pass & " cmd.exe /c ping 127.0.0.1 -n 1")
				  msgbox(0,"",$Auth)
				  If $Auth <> 0 Then
					MsgBox(0,$Title,"Вы ввели не правильный логин или пароль" &@CRLF&"Попробуйте еще раз.")
				  EndIf
			   Until $Auth = 0
			   $Ping=Ping($Host,1)
			   $Ping2=Ping($SrvHost,1)
			   If ($Ping <> 0) Then
			   If ($Ping2 <> 0) Then
				  GUICtrlSetData($Mylist, "Компьютер: " & $Host & " доступен )")
				  GUICtrlSetData($Mylist, "Компьютер: " & $SrvHost & " доступен )")
				  If GUICtrlRead ($DWButtonInstall) = $GUI_CHECKED Then
					 DWInstall()
				  EndIf
				  If GUICtrlRead ($UVNCButtonInstall) = $GUI_CHECKED Then
					 UVNCInstall()
				  EndIf
			   Else
				  GUICtrlSetData($Mylist, "Компьютер: " & $Host & " не отвечает (")
				  GUICtrlSetData($Mylist, "Компьютер: " & $SrvHost & " не отвечает (")
				  GUICtrlSetData($Mylist, "Выход... ")
				  Sleep(2000)
				  Exit
			   EndIf
			   EndIf
			Else
			   MsgBox(48,$Title,"Введите логин и пароль!")
			EndIf
		 Else
			MsgBox(48,$Title,"Введите имя компьютера или IP!")
		 EndIf
	  EndFunc

Func DWInstall()
   ;MsgBox(0,"",$Connect)
   $Connect=RunWait($psexec & " -c -f "& "\\" & $Host & " -u " & $Login & " -p " & $Pass &" "& $Client & " dw")
   If $Connect=0 Then
	  GUICtrlSetData($Mylist, "Служба успешно установлена на компьютере: "& $Host)
	  sleep(2000)
	  if FileExists("C:\Program Files (x86)\SolarWinds\DameWare Remote Support\DWRCC.EXE") or FileExists("C:\Program Files (x86)\SolarWinds\DameWare Remote Support\DWRCC.EXE") Then
		 GUICtrlSetData($Mylist, "Подключаюсь к: "& $Host)
		 Run("C:\Program Files (x86)\SolarWinds\DameWare Remote Support\DWRCC.EXE -c: -x: -h: -m:" & $Host & " -u:" & $Login & " -p:" & $Pass & " -a:2")
	  Else
		 MsgBox(48,$Title,"Dameware не айдена на вашем компьютере")
		 Exit
	  EndIf
   ElseIf $Connect=4 Then
	  MsgBox(16,$Title,"Произошла ошибка! " & "Код выхода: " & $Connect)
	  Exit
   ElseIf $Connect=5 Then
	  MsgBox(16,$Title,"Перезапуск службы не удался")
	  Exit
   EndIf
EndFunc

Func UVNCInstall()
   ;MsgBox(0,"",$Connect)
   $Connect=RunWait($psexec & " -c -f "& "\\" & $Host & " -u " & $Login & " -p " & $Pass &" "& $Client & " vnc")
   If $Connect=0 Then
	   GUICtrlSetData($Mylist, "Служба успешно установлена на компьютере: "& $Host)
	   sleep(2000)
	   GUICtrlSetData($Mylist, "Подключаюсь к: "& $Host)
	  Run($etc & "vncviewer.exe " & $Host &" /password 123456")
   ElseIf $Connect=4 Then
	  MsgBox(16,$Title,"Произошла ошибка! " & "Код выхода: " & $Connect)
	  Exit
   ElseIf $Connect=5 Then
	  MsgBox(16,$Title,"Перезапуск службы не удался")
	  Exit
   EndIf
EndFunc


Отдельно этот код работает:
Код:
Do

    $msg2 = "Введите пароль от локальной учетной записи администратора: "
   $Login = "Администратор"
   $Pass = InputBox("", $msg2, "", "*")
   If (@error = 1) Then
    Exit
   EndIf
   $CMD=RunWait("psexec.exe \\" & "pc-tv" & " -u " & $Login & " -p " & $Pass & " cmd.exe /c ping 127.0.0.1 -n 1")
   If $CMD <> 0 Then
    MsgBox(0,"","Неправильный логин или пароль. Попробуйте еще раз.")
   ElseIf $CMD =0 Then
    MsgBox(0,"","Ура! Вы ввели правильные данные")
   EndIf
Until $CMD = 0

А когда вставляю его в основной скрипт, то не хочет.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Прежде, чем передавать сложную строку на выполнение, очень полезно посмотреть, что получилось в итоге. Замените RunWait на ConsoleWrite или на MsgBox и сами увидите, где пропущен пробел.
 
Верх