ja das hatte ich schon gemacht;) hatte nur teilweise etwas gebracht, dann kam zwar die Info aber der Copybefehl ging nicht. Aber denke mal mit der Trennung ist jetzt jetzt die sauberste Lösung.
lg und einen schönen Anend noch
ja das hatte ich schon gemacht;) hatte nur teilweise etwas gebracht, dann kam zwar die Info aber der Copybefehl ging nicht. Aber denke mal mit der Trennung ist jetzt jetzt die sauberste Lösung.
lg und einen schönen Anend noch
so ich habe das ganze mal in 2 Prozesse gezogen und das ganze in eine Function gezogen, so wird erst kurz die Authentifizierung gecheckt und dann kommt der Rest. Vielleicht nicht schön aber ist ne Lösung:
#include <File.au3>
#include <MsgBoxConstants.au3>
#include <File.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
#include <WinAPIFiles.au3>
HotKeySet("{ESC}", "AbortScript") ; Abbrechen mit Escape-Taste
Global $usb = _checkBackVolume()
$width = 40
$height = 10
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Pfade bitte ggf. anpassen
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Global $ServerIP = "x.x.x.x"
Global $bash = 'C:\cygwin64\bin\bash.exe'
Local $targetPath = "/cygdrive/" & $usb & "/linuxback/koha/"
Local $sourcePath = "/var/backup/"
Local $sourcePath2 = "/"
Local $sourcePath3 = "/"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_checkDomain()
_CheckAndCreateBacksServerFolder()
_Authcheck()
_ProgressGUI()
;MAIN
; Kopierbefehl
Local $bashCommand = $bash & ' -l -c "rsync -azP --delete --progress -e /usr/bin/ssh.exe root@' & $serverIP & ':' & $sourcePath & ' ' & $targetPath & '"'
ConsoleWrite("Bash-Befehl: " & $bashCommand & @CRLF) ; Konsolenausgabe
RunWait($bashCommand, "", @SW_HIDE)
_MoveProgressBar()
_ErfolgsMSG()
_MoveProgressBar()
_MoveProgressBar()
_MoveProgressBar()
GUIDelete()
; Funktionen für GUI
Func _ProgressGUI()
; Erstellen Sie ein GUI-Fenster mit Fortschrittsbalken
GUICreate("Backup vom Server wird geholt", 300, 100)
GUISetState(@SW_SHOW)
GUICtrlCreateLabel("Backup vom Server wird geholt", 10, 10, 280, 20) ; Text für Fortschrittsanzeige
GUICtrlSetFont(-1, 12, 800) ; Schriftgröße 12 und fett (800)
Global $ProgressBar = GUICtrlCreateProgress(10, 40, 280, 30, $PBS_MARQUEE) ; Fortschrittsbalken
GUICtrlCreateLabel("Escape zum Abbrechen", 10, 75, 280, 20, $SS_CENTER) ; Text am unteren Rand
GUICtrlSetFont(-1, 10, 800) ; Schriftgröße 10 und fett (800)
EndFunc
Func _MoveProgressBar()
For $i = 1 To 100 Step 10;Bewegung Balken
GUICtrlSendMsg($ProgressBar, $PBM_SETPOS, $i, 0)
Sleep(500) ; Ändere die Schlafdauer je nach Fortschrittsgeschwindigkeit
Next
EndFunc
Func _ErfolgsMSG()
$sMessage = "Backup wurde vom Server geholt!"
SplashTextOn("", $sMessage, 260, 40, @DesktopWidth - 280, @DesktopHeight - 50, $DLG_TEXTLEFT + $DLG_NOTITLE + $DLG_MOVEABLE, "Arial", 11, "")
_Speak("Das Backup vom KOHA Server wurde gesichert")
Sleep(9000)
SplashOff()
EndFunc
Func _Speak($text)
$oSp = ObjCreate("SAPI.SpVoice")
$oSp.Speak($Text)
EndFunc
Func _checkDomain()
; Überprüfen, ob der Server 192.168.100.33 im LAN erreichbar ist
If Ping("192.168.100.33", 1000) Then
ToolTip("Der verwendete PC darf sich nicht in der Domäne befinden, bitte offenes LAN nutzen !!!", 0, 0)
Sleep(2000) ; 2 Sekunden warten
ToolTip("") ; Tooltip ausblenden
SplashTextOn("", "Bitte offenes WLAN nutzen und noch mal probieren", 300, 110, @DesktopWidth - 320, @DesktopHeight - 80, $DLG_TEXTLEFT + $DLG_NOTITLE + $DLG_MOVEABLE, "Arial", 11, "")
Sleep(3000) ; 3 Sekunden warten
SplashOff()
Exit ; Beenden Sie das Skript, wenn der DC erreichbar ist, da kein SSH
EndIf
EndFunc
Func _checkBackVolume()
Local $var = DriveGetDrive("all")
If Not @error Then
For $i = 1 To $var[0]
Local $search = FileExists($var[$i] & "\backupmedium1.txt") ; Beachten Sie den Backslash "\"
If $search Then
$usb = StringUpper(StringLeft($var[$i], 1)) ; Ersten Buchstaben des Laufwerks in Großbuchstaben
ExitLoop
EndIf
Next
If $usb = '' Then
SoundPlay("C:\Windows\Media\Windows-Hardwarefehler.wav") ; Warnton abspielen
_Speak("Bitte schließen Sie das Backup-Medium an")
MsgBox(16, "Fehler", "Kein Backup-Volume gefunden")
Exit
EndIf
EndIf
Return $usb
EndFunc
Func _CheckAndCreateBacksServerFolder()
Local $sFolderPath = $usb & ":\linuxback\koha"
ConsoleWrite("Überprüfe und erstelle Ordner: " & $sFolderPath & @CRLF)
If Not FileExists($sFolderPath) Then
DirCreate($sFolderPath)
If Not FileExists($sFolderPath) Then
ConsoleWrite("Fehler: Der Ordner konnte nicht erstellt werden: " & $sFolderPath & @CRLF)
MsgBox(16, "Fehler", "Der Ordner konnte nicht erstellt werden: " & $sFolderPath)
Exit
EndIf
EndIf
EndFunc
Func _Authcheck()
Local $iPID = Run(@ComSpec & " /c " & 'C:\cygwin64\bin\bash.exe -l -c "/usr/bin/ssh.exe root@x.x.x.x"', @SystemDir, @SW_HIDE, $STDERR_MERGED) ; $STDERR_CHILD + $STDOUT_CHILD)
Local $sOutput = ""
Do
$sOutput &= StdOutRead($iPID)
Until @error
;MsgBox($MB_SYSTEMMODAL, "Stderr or stdout Read:", $sOutput)
If StringInStr($sOutput, "failed") Then
MsgBox($MB_SYSTEMMODAL, "Auth", "Überprüfen Sie denn SSH Host-key!")
exit
Else
SplashTextOn("", "Authentifizierung ok", 150, 35, @DesktopWidth - 150, 10, $DLG_TEXTLEFT + $DLG_NOTITLE + $DLG_MOVEABLE, "Arial", 11)
Sleep(2000) ; 2 Sekunden lang Popup anzeigen
SplashOff()
Endif
EndFunc
Func AbortScript() ; Abbruchfunktion
Local $pidToClose = "bash.exe" ; Ersetze diese Zeile durch die PID, die du beenden möchtest
If ProcessExists($pidToClose) Then
ProcessClose($pidToClose)
EndIf
; Beende das Skript
Exit
EndFunc
Alles anzeigen
Danke noch mal für die Anregungen und noch einen schönen Sonntag
danke erstmal, wie gesagt die Prüfung hatte schon funktioniert, aber mit der Schleife funktioniert Run nicht sondern nur Runwait, ich persönlich vermute ja ein Timing Problem. Leider ist die Dokumentation was das korrekte Auslesen des Rückgabeweetes angeht leider mehr als rudimentät:(
Also momentan läuft das Kopieren, aber nun liest er nur noch leere Werte aus:
Local $bashCommand = $bash & ' -l -c "rsync -azP --delete --progress -e /usr/bin/ssh.exe root@' & $serverIP & ':' & $sourcePath & ' ' & $targetPath & '"'
ConsoleWrite("Bash-Befehl: " & $bashCommand & @CRLF) ; Konsolenausgabe
Local $iPID = RunWait($bashCommand, "", @SW_show, $STDERR_CHILD + $STDOUT_CHILD)
;Check Authentifizierung
While 1
$sLine = StdoutRead($STDOUT_CHILD)
If @error Then ExitLoop
$strOut &= $sLine
WEnd
Sleep ( 700 )
$strErr = StdoutRead($iPID)
;MsgBox(262144,"Title", $strErr)
If StringInStr($strErr, "rec") Then
SplashTextOn("", "Authentifizierung ok", 150, 35, @DesktopWidth - 150, 10, $DLG_TEXTLEFT + $DLG_NOTITLE + $DLG_MOVEABLE, "Arial", 11)
Sleep(2000) ; 2 Sekunden lang Popup anzeigen
SplashOff()
Else
MsgBox(16, '', 'Überprüfen Sie den SSL-Schlüssel !')
exit
EndIf
;_Authcheck($iPID)
_MoveProgressBar()
_ErfolgsMSG()
_MoveProgressBar()
_MoveProgressBar()
_MoveProgressBar()
GUIDelete()
Alles anzeigen
lg
schönen Sonntag
vielen Dank für den Hinweis, werde ich mal checken. Irgendwie scheint das Thema StdOut komplizierter als ich dachte. Das hatte ich schon verbeseert in
geht aber auch nichte gesagt mit Run bricht der Befehl sofort ab
Also ich will es noch mal klarer formulieren, ist eigentlich ganz simpel was ich mcöhte. Es wird ein Kopierbefehl ausgeführt. Dieser läuft auch, sehe ich daran, dass Dateien kopiert werden. Als Kriterium dass etwas schief läuft nehme ich den Text der bei Beginn des bash Prozesses gezeigt wird, wenn ein SSH key vorliegt errscheint da Receiving File List. Woher ich dass weiss? ich habe den rsyncbefehl mit den richtigen Pfaden auf der Komanozeile abgesetzt. Wenn dieser Text erscheint soll er eine msg bringen Authentifizierung ok wenn nicht dann dass ein Fehler passiert ist. Hoffe ich habe mich jetzt klarer ausgedrückt;) Ich ging bislang davon aus, dass man das mit stdout speichern kann, aber dass bleibt bei mir immer leer.
lg und schöne WE
Also noch mal den Hauptteil, die variable $stdout scheint immer leer zu sein, egal ob Receive erscheint oder nicht:
#include <File.au3>
#include <MsgBoxConstants.au3>
#include <File.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
#include <WinAPIFiles.au3>
HotKeySet("{ESC}", "AbortScript") ; Abbrechen mit Escape-Taste
Global $usb = _checkBackVolume()
Global $rueckgabe = ''
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Pfade bitte ggf. anpassen
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Global $ServerIP = "87.106.128.49"
Global $bash = 'C:\cygwin64\bin\bash.exe'
Local $targetPath = "/cygdrive/" & $usb & "/linuxback/koha/"
Local $sourcePath = "/var/backup/"
Local $sourcePath2 = "/"
Local $sourcePath3 = "/"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_checkDomain()
_CheckAndCreateBacksServerFolder()
_ProgressGUI()
;MAIN
; Kopierbefehl
Local $bashCommand = $bash & ' -l -c "rsync -azP --delete --progress -e /usr/bin/ssh.exe root@' & $serverIP & ':' & $sourcePath & ' ' & $targetPath & '"'
ConsoleWrite("Bash-Befehl: " & $bashCommand & @CRLF) ; Konsolenausgabe
Local $iPID = RunWait($bashCommand, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
If @error Then
MsgBox(16, '', 'Fehler beim Ausführen des Befehls')
Exit
EndIf
Local $sStdOut = ""
Local $authOKFound = False
If StdOutRead($ipid,True) Then $rueckgabe &= StdERead($ipid)
;MsgBox(262144,"Title", $rueckgabe)
While 1
$sStdOut &= StdoutRead($iPID)
Sleep(2000)
MsgBox(262144,"Title", $sStdOut)
If @error Then ExitLoop
If not StringInStr($sStdOut, "receiving") Then
ConsoleWrite("Authentifizierung ok" & @CRLF)
$authOKFound = True
SplashTextOn("", "Authentifizierung ok", 300, 50, @DesktopWidth - 320, 30, $DLG_TEXTLEFT + $DLG_NOTITLE + $DLG_MOVEABLE, "Arial", 11, 4000) ; 4 Sekunden lang Popup anzeigen
Sleep(4000) ; Sicherstellen, dass das Popup ausreichend Zeit hat, um angezeigt zu werden
SplashOff()
ExitLoop
EndIf
Wend
If Not $authOKFound Then
MsgBox(16, '', 'Keine Authentifizierung möglich, Sie verfügen nicht über entsprechende RSA Schlüssel')
Exit
EndIf
_MoveProgressBar()
_ErfolgsMSG()
_MoveProgressBar()
_MoveProgressBar()
_MoveProgressBar()
GUIDelete()
Alles anzeigen
jetzt scheint es zu funktionieren, es muss natürlich RunWait heissen, aber nun sagt er mir wenn der Job fertif kopiert hat Kein Schlüssel vorhanden, stimmt da was nicht an der Reihenfolge, oder hab ich das ganze verkompliziert?
ich habe den Checkblock noch mal rausgenommen und en ursprünglichen Run begefel rei genommen, mit dem gehts :
Local $bashCommand = $bash & ' -l -c "rsync -azP --delete --progress -e /usr/bin/ssh.exe root@' & $serverIP & ':' & $sourcePath & ' ' & $targetPath & '"'
ConsoleWrite("Bash-Befehl: " & $bashCommand & @CRLF) ; Konsolenausgabe
RunWait($bashCommand, "", @SW_show)
aber mit dem bekomm ich das mit der Überprüfung nicht hin:(
ah ok dann weiss ich Bescheid, werde ich noch einbauen, danke Dir. Ich habe das ganze noch mal neu aufgerollt, da mir nicht gefallen hat dass die Dteien hier immer komplett neu runtergeholt werden und das mit dem Passwort so noch nicht optimal war. Deshalb habe ich jetzt auf rsync umgeschwenkt, ist ja wohl ne gängige Praxis bei der Serversicherung. Zudem habe ich entsprechende RSA Schlüssel erzeugt und ausgetauscht. Mein Script funktioniert auch schon soweit. Nun kam ich noch auf die bescheuerte Idee die $stdout auslesen zu wollen, um über den Text Receiving entsprechende Meldungen auszugeben, dass evtl. ein Key Problem vorliegt. Die Fehlermeldungen kommen jtzt zwar aber der Kopierjob funktioniert so leider nicht. Vielleicht sieht ja jemand den Fehler,
#include <File.au3>
#include <MsgBoxConstants.au3>
#include <File.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
#include <WinAPIFiles.au3>
HotKeySet("{ESC}", "AbortScript") ; Abbrechen mit Escape-Taste
Global $usb = _checkBackVolume()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Pfade bitte ggf. anpassen
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Global $ServerIP = "0.0.0.0"
Global $bash = 'C:\cygwin64\bin\bash.exe'
Local $targetPath = "/cygdrive/" & $usb & "/linuxback/koha/"
Local $sourcePath = "/var/backup/"
Local $sourcePath2 = "/"
Local $sourcePath3 = "/"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_checkDomain()
_CheckAndCreateBacksServerFolder()
_ProgressGUI()
;MAIN
; Kopierbefehl
Local $bashCommand = $bash & ' -l -c "rsync -azP --delete --progress -e /usr/bin/ssh.exe root@' & $serverIP & ':' & $sourcePath & ' ' & $targetPath & '"'
ConsoleWrite("Bash-Befehl: " & $bashCommand & @CRLF) ; Konsolenausgabe
Local $iPID = Run($bashCommand, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) ; Ausühren des Befehls
If @error Then
MsgBox(16, '', 'Fehler beim Ausführen des Befehls')
Exit
EndIf
Local $sStdOut = ""
Local $authOKFound = False
While 1
$sStdOut &= StdoutRead($iPID)
If @error Then ExitLoop
If StringInStr($sStdOut, "receiving") Then
ConsoleWrite("Authentifizierung ok" & @CRLF)
$authOKFound = True
SplashTextOn("", "Authentifizierung ok", 300, 50, @DesktopWidth - 320, 30, $DLG_TEXTLEFT + $DLG_NOTITLE + $DLG_MOVEABLE, "Arial", 11, 4000) ; 4 Sekunden lang Popup anzeigen
Sleep(4000) ; Sicherstellen, dass das Popup ausreichend Zeit hat, um angezeigt zu werden
SplashOff()
ExitLoop
EndIf
Wend
If Not $authOKFound Then
MsgBox(16, '', 'Keine Authentifizierung möglich, Sie verfügen nicht über entsprechende RSA Schlüssel')
Exit
EndIf
_MoveProgressBar()
_ErfolgsMSG()
_MoveProgressBar()
_MoveProgressBar()
_MoveProgressBar()
GUIDelete()
Func _ProgressGUI()
; Erstellen Sie ein GUI-Fenster mit Fortschrittsbalken
GUICreate("Backup vom Server wird geholt", 300, 100)
GUISetState(@SW_SHOW)
GUICtrlCreateLabel("Backup vom Server wird geholt", 10, 10, 280, 20) ; Text für Fortschrittsanzeige
GUICtrlSetFont(-1, 12, 800) ; Schriftgröße 12 und fett (800)
Global $ProgressBar = GUICtrlCreateProgress(10, 40, 280, 30, $PBS_MARQUEE) ; Fortschrittsbalken
GUICtrlCreateLabel("Escape zum Abbrechen", 10, 75, 280, 20, $SS_CENTER) ; Text am unteren Rand
GUICtrlSetFont(-1, 10, 800) ; Schriftgröße 10 und fett (800)
EndFunc
Func _MoveProgressBar()
For $i = 1 To 100 Step 10;Bewegung Balken
GUICtrlSendMsg($ProgressBar, $PBM_SETPOS, $i, 0)
Sleep(500) ; Ändere die Schlafdauer je nach Fortschrittsgeschwindigkeit
Next
EndFunc
Func _ErfolgsMSG()
$sMessage = "KOHA APACHE-Server, Backup wurde geholt!"
SplashTextOn("", $sMessage, 300, 110, @DesktopWidth - 320, @DesktopHeight - 80, $DLG_TEXTLEFT + $DLG_NOTITLE + $DLG_MOVEABLE, "Arial", 11, "")
_Speak("Das Backup vom KOHA Server wurde gesichert")
Sleep(9000)
SplashOff()
EndFunc
Func _Speak($text)
$oSp = ObjCreate("SAPI.SpVoice")
$oSp.Speak($Text)
EndFunc
Func _checkDomain()
; Überprüfen, ob der Server 192.168.100.33 im LAN erreichbar ist
If Ping("192.168.100.33", 1000) Then
ToolTip("Der verwendete PC darf sich nicht in der Domäne befinden, bitte offenes LAN nutzen !!!", 0, 0)
Sleep(2000) ; 2 Sekunden warten
ToolTip("") ; Tooltip ausblenden
SplashTextOn("", "SSH Port gesperrt!!!", 300, 110, @DesktopWidth - 320, @DesktopHeight - 80, $DLG_TEXTLEFT + $DLG_NOTITLE + $DLG_MOVEABLE, "Arial", 11, "")
Sleep(3000) ; 3 Sekunden warten
SplashOff()
Exit ; Beenden Sie das Skript, wenn der DC erreichbar ist, da kein SSH
EndIf
EndFunc
Func _checkBackVolume()
Local $var = DriveGetDrive("all")
If Not @error Then
For $i = 1 To $var[0]
Local $search = FileExists($var[$i] & "\backupmedium1.txt") ; Beachten Sie den Backslash "\"
If $search Then
$usb = StringUpper(StringLeft($var[$i], 1)) ; Ersten Buchstaben des Laufwerks in Großbuchstaben
ExitLoop
EndIf
Next
If $usb = '' Then
SoundPlay("C:\Windows\Media\Windows-Hardwarefehler.wav") ; Warnton abspielen
_Speak("Bitte schließen Sie das Backup-Medium an")
MsgBox(16, "Fehler", "Kein Backup-Volume gefunden")
Exit
EndIf
EndIf
Return $usb
EndFunc
Func _CheckAndCreateBacksServerFolder()
Local $sFolderPath = $usb & ":\linuxback\koha"
ConsoleWrite("Überprüfe und erstelle Ordner: " & $sFolderPath & @CRLF)
If Not FileExists($sFolderPath) Then
DirCreate($sFolderPath)
If Not FileExists($sFolderPath) Then
ConsoleWrite("Fehler: Der Ordner konnte nicht erstellt werden: " & $sFolderPath & @CRLF)
MsgBox(16, "Fehler", "Der Ordner konnte nicht erstellt werden: " & $sFolderPath)
Exit
EndIf
EndIf
EndFunc
Func AbortScript() ; Abbruchfunktion
Exit
EndFunc
Alles anzeigen
Vielen Dank noch mal
lg und schönes WE
ok ich habs jetzt erst mal, wenn noch Anregungen gerne. Mit Regex schau ich demnächst mal
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.16.1
Author: myName
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
; Script Start - Add your code below here
Opt('MustDeclareVars', 1)
#include <File.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>
Global $PSCommand, $password, $pid, $output, $errorOutput, $line, $tries = 0
Global Const $maxfails = 3
Global Const $ServerIP = "x.x.x.x"
;LINUX COMMANDS
Global Const $Command2 = 'systemctl start apache2'
; Datei "log.txt" löschen, falls vorhanden
FileDelete("C:\log.txt")
_precheck()
While 1
$output = ""
$errorOutput = ""
; Benutzer zur Eingabe des Passworts auffordern
$Password = InputBox("Anmeldeinformationen", "Geben Sie Ihr Passwort ein:", "", "*")
;Es wurde Abbrechen geklickt
If @error = 1 then ExitLoop
; Stellen Sie sicher, dass ein Passwort eingegeben wurde
If $Password = "" Then
MsgBox(16, "Fehler", "Kein Passwort eingegeben.")
ExitLoop
EndIf
;Anzahl Versuche hochzählen
$tries += 1
; Starten Sie PowerShell und übergeben Sie das Passwort
;StartSSH
_startSSH()
;SSHcommand
$PSCommand &= 'Invoke-SSHCommand -SSHSession $Session -Command \"' & $Command2 & '\" ; '
;SSH Sessioin beenden
_EndSSH()
$pid = Run($PSCommand, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
While 1
$line = StdoutRead($pid)
If @error Then ExitLoop
$output &= $line
WEnd
While 1
$line = StderrRead($pid)
If @error Then ExitLoop
$errorOutput &= $line
WEnd
If StringInStr($errorOutput, "Permission denied (keyboard-interactive)") Then
MsgBox(16, "Fehler", "Zugriff verweigert. Bitte überprüfen Sie das Passwort.")
;Prüfen ob zu viele Fehlversuche erreicht wurden.
If $tries = $maxfails then ExitLoop
Else
FileWrite("C:\log.txt", $output)
MsgBox(0, "Info", "Server wurde neu gestartet. Weitere Informationen finden Sie in C:\log.txt.")
ExitLoop
EndIf
WEnd
Func _StartSSH()
$PSCommand = 'powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "'
$PSCommand &= '$Username = \"root\" ; ' ; Hier ist der Benutzername festgelegt
$PSCommand &= '$Password = ConvertTo-SecureString -String \"' & $Password & '\" -AsPlainText -Force ; '
$PSCommand &= '$Credential = New-Object System.Management.Automation.PSCredential($Username, $Password) ; '
$PSCommand &= '$Session = New-SSHSession -ComputerName \"' & $ServerIP & '\" -Credential $Credential -Port 22 ; '
EndFunc
Func _EndSSH()
$PSCommand &= 'Remove-SSHSession -SSHSession $Session ; "'
EndFunc
Func _ErrorHandling()
EndFunc
Func _precheck()
If Not FileExists("C:\Program Files\PuTTY\pscp.exe") Then
ToolTip("Die Datei 'C:\Program Files\PuTTY\pscp.exe' wird jetzt bereitgestellt!", 0, 0)
Sleep(2000) ; 2 Sekunden warten
ToolTip("") ; Tooltip ausblenden
; Hier MSI-Installation durchführen
_InstallPSCP()
EndIf
; Überprüfen, ob der Server 192.168.100.33 im LAN erreichbar ist
; If Ping("192.168.100.33", 1000) Then
; ToolTip("Der verwendete PC darf sich nicht in der Domäne befinden, bitte offenes LAN nutzen !!!", 0, 0)
; Sleep(2000) ; 2 Sekunden warten
; ToolTip("") ; Tooltip ausblenden
; EndIf
; Überprüfen, ob der Server 192.168.100.50 im LAN erreichbar ist
If Ping("192.168.100.33", 1000) Then
ToolTip("Der verwendete PC darf sich nicht in der Domäne befinden, bitte offenes LAN nutzen !!!", 0, 0)
Sleep(2000) ; 2 Sekunden warten
ToolTip("") ; Tooltip ausblenden
SplashTextOn("", "Bitte offenes WLAN nutzen und noch mal probieren", 300, 110, @DesktopWidth - 320, @DesktopHeight - 80, $DLG_TEXTLEFT + $DLG_NOTITLE + $DLG_MOVEABLE, "Arial", 11, "")
Sleep(3000) ; 3 Sekunden warten
SplashOff()
Exit ; Beenden Sie das Skript, wenn der Server erreichbar ist
EndIf
EndFunc
Alles anzeigen
klingt gut, werde ich mich mal mit befassen, wenn mehr Zeit. Aber ich weiss jetzt warum es neulich nicht funktionierte, weil ich es in der Domänenumgebung versehentlich gestarten hatte, und da ist ssh leider gesperrt. Also kommt bei Fehleingabe des Passwortes der Text server wurde neu gestartet, passiet natürlich nix. Also fehlt nur noch ne Abfrage dass er dass dann nicht bringt sondern ein Fenster Bitte nicht in der Domänenumgebung verrwenden, also wenn Bedingung server 192.168.100.50 erreichbar (Domänenserver) aber an welche Stelle, dass ist hier die Frage
lg
und schönen Abend noch
Also mit dem Regex Ansatz müsste ich mich noch mal bei Gelegenheit genauer befassen, denke es muss aber auch nciht so kompliziert funktionieren, wenn man das auch mit stdout erledigen kann. So und nun habe ich noch mal geschaut und nun funktioniert komischerweise wieder meine vorversion bzw, auch deine angepasste Version, ganz merkwürdig.
lg
okidoki recht herzlichen Dank, werde ich morgen gleich mal testen
lg und schönen Abend noch
ja funktioniert jetzt beides nicht mehr, ich hatte es gestern abend noch mehrfach getestet, selbst wenn ich bei 2ten mal das pw richtig eingebe kommt paswort verweigert, weil das log immer leer bleibt, kein Plan warum es gestern ging
@Taler:ist diede Methode sicher?
lg und einen schönen Abend
schon megakomisch, gestern hats wirklich noch funktioniert, jetzt bleibt das log immer leer und er fährt mit der weiteren Verarbeitung fort, auc hwenn er natürlcih nichts tut bei falschem Pw, aber er sagt das er was tut und keine erneute PW Abfrage, gestern stand noch im log irgendwas mit Fehler 0 bei erfolgtem Login.
Zum Mäuse melken
jo danke MOmbi, war wohl gestern noch zu spät, komischerweise hat es da noch funktioneirt, ich versuchew mal Deine überarbeitete.
recht herzlichen Dank
lg
PS @Taler Danke für den Tip
so ich habe mal versucht jetzt eure Vorschläge zusammenzupacken und bin jetzt zu folgendem funktionsähigen Ergebnis gekommen, wenn jemand noch Ergänzungsvorschläge hat, gerne:
#include <File.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>
; Datei "log.txt" löschen, falls vorhanden
FileDelete("C:\log.txt")
Global $PSCommand = 'powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "'
Global $ServerIP = "x.x.x.x"
Global $Command2 = 'systemctl start apache2'
While 1
; Benutzer zur Eingabe des Passworts auffordern
Local $Password = InputBox("Anmeldeinformationen", "Geben Sie Ihr Passwort ein:", "", "*")
; Stellen Sie sicher, dass ein Passwort eingegeben wurde
If $Password = "" Then
MsgBox(16, "Fehler", "Kein Passwort eingegeben.")
ExitLoop
EndIf
; Starten Sie PowerShell und übergeben Sie das Passwort
;StartSSH
$PSCommand &= '$Username = \"root\" ; ' ; Hier ist der Benutzername festgelegt
$PSCommand &= '$Password = ConvertTo-SecureString -String \"' & $Password & '\" -AsPlainText -Force ; '
$PSCommand &= '$Credential = New-Object System.Management.Automation.PSCredential($Username, $Password) ; '
$PSCommand &= '$Session = New-SSHSession -ComputerName \"' & $ServerIP & '\" -Credential $Credential -Port 22 ; '
;SSHcommand
$PSCommand &= 'Invoke-SSHCommand -SSHSession $Session -Command \"' & $Command2 & '\" ; '
;SSH Sessioin beenden
$PSCommand &= 'Remove-SSHSession -SSHSession $Session ; "'
Local $pid = Run($PSCommand, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Local $output = ""
Local $errorOutput = ""
While 1
$line = StdoutRead($pid)
If @error Then ExitLoop
$output &= $line
WEnd
While 1
$line = StderrRead($pid)
If @error Then ExitLoop
$errorOutput &= $line
WEnd
If StringInStr($errorOutput, "Permission denied (keyboard-interactive)") Then
MsgBox(16, "Fehler", "Zugriff verweigert. Bitte überprüfen Sie das Passwort.")
Else
FileWrite("C:\log.txt", $output)
MsgBox(0, "Info", "Server wurde neu gestartet. Weitere Informationen finden Sie in C:\log.txt.")
ExitLoop
EndIf
WEnd
Alles anzeigen
lg und eine schöne Woche noch
ok Moombas dann werd ich das erst mal prüfen
recht herzlichen Dank für euren Input
ne Iddee wäre vielleicht die authlog aus var/logs auf der LinuxSeite zu nutzen, bei erscheinen dann diese 2 Zeilen:
ZitatOct 9 14:49:39 s19457989 sshd[2278]: Failed password for invalid user spark from 220.83.208.16 port 37428 ssh2
Oct 9 14:49:40 s19457989 sshd[2278]: Connection closed by invalid user spark 220.83.208.16 port 37428 [preauth]
Könnte man dass evtl checken durch Autoit
hall danke euch erstmal, also wie ich dem SSH client das sagen soll dass er eine Datei schreiben soll müsste ich ma gucken.
@Mombas: das werde ich gleich mal ausprobieren, ich versteh jetzt aber nicht was das hier macht:
oder ist das nur exemplarisch gemeint, adb kenne ich von meinem Handy;)
danke und bis spädder