Что нового

Работа с putty используя AutoIt

alt7

Новичок
Сообщения
8
Репутация
2
Доброе время суток!
Подскажите, каким образом можно осуществить автоматизацию работы с putty? Необходимо:
вводить адреса серверов из списка, подключаться к серверам, вводить логин и пароль (проходить авторизацию), после чего выполнять ряд команд.
Подскажите, в каком направлении необходимо двигаться.
 

beve

Осваивающий
Сообщения
104
Репутация
30
alt7 [?]
Подскажите, в каком направлении необходимо двигаться.
Изучите аргументы командной строки для putty, а дальше уже с помощью autoit это дело можно и упорядочить-настроить.
 
Автор
A

alt7

Новичок
Сообщения
8
Репутация
2
beve сказал(а):
alt7 [?]
Изучите аргументы командной строки для putty
Я попробывал сделать, вот что у меня получилось:
Код:
Run("c:\putty\putty.exe") ; запускаю putty
WinWaitActive("PuTTY Configuration") ; активное окно PuTTY Configuration
Send("10.10.10.10") ;ввожу адрес сетевого ресурса к которому надо подключиться
Send("{ENTER}") ; подключаюсь
WinWaitActive("[CLASS:PuTTY]") ; активным окно PuTTY Security Alert c вопросом о генерации ключей
Send("!Д") ; подтверждаю генерацию ключей
; а после этого у меня появляется черное окно с приглашнением на ввод логина и соответсвенно потом пароля, но что-то я делаю не так и логин и пароль не вводится
WinActivate("[CLASS:PuTTY]", "")
Send("admin")
Send("{ENTER}")
Send("pass")
Send("{ENTER}")

Если после запуска первого скрипта запускаю второй скрип :
Код:
WinActivate("[CLASS:PuTTY]", "")
Send("admin")
Send("{ENTER}")
Send("pass")
Send("{ENTER}")

То логин и пароль вводятся в окне putty. Вопрос почему логин и пароль не вводятся в окно putty при запуске первого скрипта и нормально отрабатывает при запуске второго?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
{CodeWarn}
 
Автор
A

alt7

Новичок
Сообщения
8
Репутация
2
У когонить есть какиенить мысли по данному вопросу?
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
369
Всем кто хочет автоматизировать работу по SSH или Telnet всегда рекомендую SecureCRT
Есть поддержка скриптов на perl и VBS.
Ну и пример подключения к устройству по telnet на AutoIt
Код:
Opt("TrayIconDebug", 1)
Opt("TCPTimeout", 300)
Opt("GUICloseOnESC", 0)
Opt("GUIOnEventMode",1)

#include <EditConstants.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>

$SW = GuiCreate("Connect", 235, 110, @DesktopWidth/2-125, @DesktopHeight/2-75, BitOR($WS_BORDER, $WS_POPUP))
$startIP = GuiCtrlCreateInput("", 15, 35, 200, 21)
$label_1 = GUICtrlCreateLabel("Enter IP-address:", 15, 10, 100, 20)
$connectbutton = GUICtrlCreateButton("Connect", 15, 65, 80, 30, $BS_DEFPUSHBUTTON + $BS_FLAT)
$quitbutton = GUICtrlCreateButton("Quit", 135, 65, 80, 30, $BS_FLAT)
$guidragcontrol = GUICtrlCreatePic("", 0, 0, 235, 110, -1, $GUI_WS_EX_PARENTDRAG)

$TW = GUICreate(" a small telnet (=", 1000, 600, @DesktopWidth/2-500, @DesktopHeight/2-300, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_SYSMENU))
GUISetIcon(@SystemDir & "\cmd.exe")
$input = GUICtrlCreateInput("", 5, 570, 990, 25, -1, $WS_EX_STATICEDGE)
GUICtrlSetFont($input, 16, 800, 0, "Courier New")
$output = GUICtrlCreateEdit("", 5, 5, 990, 560, BitOR($ES_AUTOHSCROLL, $ES_AUTOVSCROLL, $ES_READONLY, $ES_WANTRETURN, $WS_VSCROLL), $WS_EX_STATICEDGE)
GUICtrlSetFont($output, 16, 800, 0, "Courier New")
GUICtrlSetBkColor($output, 0xFFFFFF)
GUISetState(@SW_SHOW, $TW)
GUISetState(@SW_DISABLE, $TW)
GUISetState(@SW_SHOW, $SW)

GUISetOnEvent($GUI_EVENT_CLOSE, "QuitTW", $TW)
GUICtrlSetOnEvent($connectbutton, "Connect")
GUICtrlSetOnEvent($quitbutton, "QuitSW")

Func Connect()
    $ip = GUICtrlRead($startIP)
    $syntax = StringRegExp($ip, "(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z)")
    If $syntax = 0 Then
        MsgBox(0x40000, "Syntax Error", "IP incorrect")
    Else
        GUISetState(@SW_ENABLE, $TW)
        GUISetState(@SW_HIDE, $SW)
        GUICtrlSetState($input, $GUI_FOCUS)
        TCPStartup()
        $socket = TCPConnect($ip, 23)
        Sleep(250)
        $stream = TCPRecv($socket, 100000)
        GUICtrlSetData($output, GUICtrlRead($output) & $stream)
;~      TCPSend($socket, "user" & @CRLF)
;~      Sleep(100)
;~      $stream = TCPRecv($socket, 100000)
;~      GUICtrlSetData($output, GUICtrlRead($output) & $stream)
;~      TCPSend($socket, "pass" & @CRLF)
;~      Sleep(100)
;~      $stream = TCPRecv($socket, 100000)
;~      GUICtrlSetData($output, GUICtrlRead($output) & $stream)
;~      TCPSend($socket, "command" & @CRLF)
;~      Sleep(100)
;~      $stream = TCPRecv($socket, 100000)
;~      GUICtrlSetData($output, GUICtrlRead($output) & $stream)
        TCPCloseSocket($socket)
        TCPShutdown()
        Sleep(3000)
        GUISetState(@SW_DISABLE, $TW)
        GUICtrlSetState($input, $GUI_FOCUS)
        GUICtrlSetData($input, "")
        GUICtrlSetData($output, "")
        GUISetState(@SW_SHOW, $SW)
    EndIf
EndFunc

Func QuitTW()
    GUISetState(@SW_DISABLE, $TW)
    $ask = MsgBox(0x40004, "Quit", "Leaving?")
    If $ask = 6 Then
        Exit
    Else
        GUISetState(@SW_ENABLE, $TW)
        GUISetState(@SW_RESTORE, $TW)
    EndIf
EndFunc

Func QuitSW()
    GUISetState(@SW_DISABLE, $SW)
    $ask = MsgBox(0x40004, "Quit", "Leaving?")
    If $ask = 6 Then
        Exit
    Else
        GUISetState(@SW_ENABLE, $SW)
        GUISetState(@SW_RESTORE, $SW)
    EndIf
EndFunc

While 1
    Sleep(500)
WEnd
 

IoffeMax

Новичок
Сообщения
22
Репутация
1
Вот мой скрипт работы с Putty

Написал его для автоматического управления виртуальными машинами бегущими на ESXi server 5.1 ( vmware )

Все хорошо, вот только Stdout не могу перехватить :(

Код:
#include <file.au3>
#include <Excel.au3>
#include <Constants.au3>
#include <_RegFunc.au3>
#include<string.au3>
#include <Process.au3>
#include <Array.au3>

Func Manage_VM_via_Putty( $ID_of_Virtual_Machine, $sType_of_Command )

	Local $aArr_ESXi_ini_File[ 4 ]
	Local $iDelay_ESXi = 500
	Local $iPID_Putty
	Local $sOut
	Local $i_ID_Snapshot
	Local $i_SuppressPowerOff
	Local $ii

	;************************************* Start Run Putty ****************************************************
	$iPID_Putty = Run( @ScriptDir & '\putty.exe', "", @SW_HIDE, $STDOUT_CHILD ) ;;; Run Putty

	If( 0 = $iPID_Putty ) Then
		MsgBox(4096, "Error", " Run( @ScriptDir & '\putty.exe', @SW_HIDE ):  Error = " & @error )
	EndIf

	If( 0 = WinWaitActive("PuTTY Configuration") ) Then;;; Wait until the window becomes active PuTTY Configuration
		MsgBox(4096, "Error", " WinWaitActive not wait activate it Putty" )
	EndIf
	;************************************* END Start Run Putty ************************************************

	;************************************* Login to ESXi Server ***********************************************
	Send( $aArr_ESXi_ini_File[ 1 ] ) ;;; Enter the network Address of the resource to which to connect
		Send("{ENTER}") ;;; Connect
		Sleep( $iDelay_ESXi )

	Send( $aArr_ESXi_ini_File[ 2 ] ) ;;; Enter the Username to connect
		Send("{ENTER}") ;;; Enter
		Sleep( $iDelay_ESXi )

	    ;;;   NO     PASSWORD
		Send( $aArr_ESXi_ini_File[ 3 ] ) ;;; Enter the Password to connect
		Send("{ENTER}") ;;; Enter
		Sleep( $iDelay_ESXi )
	;************************************* END Login to ESXi Server ******************************************

	$ii = 0
	While( $ii < 10 )
		$sOut &= StdoutRead( $iPID_Putty, True, False )  ;;; Read Std Out
		$ii = $ii + 1
		If @error Then ExitLoop
	WEnd

	MsgBox(4096, "Out", " SSH   Out:  $sOut = " & $sOut )
	MsgBox(4096, "Error", " StdOut  Error = " & @error )
	MsgBox(4096, " Extended ", " StdOut   Extended  = " &  @extended  )

EndFunc
 

darkwhite

Новичок
Сообщения
129
Репутация
4
Вам же человек подсказал
beve [?]
alt7 [?]
Цитата
Подскажите, в каком направлении необходимо двигаться.
Изучите аргументы командной строки для putty, а дальше уже с помощью autoit это дело можно и упорядочить-настроить.
что же вы все через putty лезите. для командной строки есть команда plink в пакете putty
 
Верх