SSH Passwort falsch

  • 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

  • Der Reg-Ex Ansatz hat den Vorteil, das du, ohne das eigentliche Server-Passwort zu ändern, das Login-Passwort ändern kannst.

    Und das ganz einfach indem du das eigentliche Passwort mit einem neuen Crypt key verschlüsselst und das entsprechend neu in die ini oder registry schreibst.

    Ab dem Moment wird das neue Passwort benötigt aber Serverseitig bleibt es gleich und AES256 verschlüsselte Passwörter sind faktisch aktuell nicht zu knacken ohne den richtigen CryptKey zu kennen (https://www.backup.ch/wie-sicher-ist…rschluesselung/).

    Du könntest damit also auch indirekt Benutzerspezifische Logins bauen wobei der eigentliche Server-Login gleich bleibt.

    Einmal editiert, zuletzt von Moombas (13. Oktober 2023 um 08:49)

  • 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

  • ok ich habs jetzt erst mal, wenn noch Anregungen gerne. Mit Regex schau ich demnächst mal

  • Ich hatte das auch mal rausgesucht, das man die Domäne auslesen kann:

    Leider habe ich die autoren davon nicht mehr vorliegen, stammt aber nicht von mir aber funktioniert bisher einwandfrei.

  • 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,

    Vielen Dank noch mal

    lg und schönes WE

  • ich habe den Checkblock noch mal rausgenommen und en ursprünglichen Run begefel rei genommen, mit dem gehts :

    AutoIt
    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:(

  • 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?

  • Also noch mal den Hauptteil, die variable $stdout scheint immer leer zu sein, egal ob Receive erscheint oder nicht:

  • Moin,

    ich kenne mich damit nicht aus, aber aus irgendwelchen Gründen sind die Optionen $STDERR_CHILD und $STDOUT_CHILD nur für Run(), nicht aber für RunWait() dokumentiert. Die Doku zu StdoutRead() enthält auch ein schönes Beispiel dafür, wie man die Kombination Run() und StdoutRead() benutzt.

    Außerdem:

    AutoIt
    If StdOutRead($ipid,True) Then $rueckgabe &= StdERead($ipid)

    Was ist StdERead()?

  • 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

    AutoIt
    If StdOutRead($ipid,True) Then $rueckgabe &= StdoutRead($ipid)

    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

    Einmal editiert, zuletzt von casi4712 (4. November 2023 um 20:03)

  • Moin,

    AutoIt
    Local $iPID = RunWait($bashCommand, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    ...
    ...
    ...
    If StdOutRead($ipid,True) Then $rueckgabe &= StdoutRead($ipid)

    für AutoIt gibt es eine zwar etwas knappe aber meist ausreichende Dokumentation.

    Zur Funktion RunWait() steht da zum Rückgabewert Folgendes:

    Zitat von Rückgabewert
    Erfolg: Den ExitCode des ausgeführten Programms.
    Fehler: Setzt das @error Flag auf ungleich null.

    Eine Prozess-ID (PID) ist nicht dabei. Der Rückgabewert kann deshalb nicht als erster Parameter für StdoutRead() verwendet werden.

    Zitat von Parameter
    process_id Die Prozess-ID eines Child-Prozesses, wie bei einem vorigen Aufruf von Run zurückgegeben

    Wenn der von RunWait() gelieferte Rückgabewert zufällig mit der PID eines Prozesses identisch wäre, wäre das Ergebnis ebenso zufällig.

    Wenn Du Dir die Doku zu den beiden Funktionen und auch die Beispiele genau anschaust, solltest Du eine Lösung finden.

    Viel Erfolg!

  • 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:

    lg

    schönen Sonntag

    3 Mal editiert, zuletzt von casi4712 (5. November 2023 um 14:23)

  • 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:

    Danke noch mal für die Anregungen und noch einen schönen Sonntag

  • Wenn Du ein Timing Problem vermutest, bau doch ein Sleep hinter den Run Befehl, damit kannst Du klären ob es am Timing liegt...

    LG

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • 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

  • Moin,

    ich habe jetzt bereits zwei Mal auf das Beispiel in der Doku hingewiesen. Was hindert Dich daran, es so zu versuchen?

    AutoIt
    ...
         Local $iPID = Run(@ComSpec & ' /C DIR "' & $sFilePath & $sFilter & '" /B /A-D /S', $sFilePath, @SW_HIDE, $STDOUT_CHILD)
        ; Um nach Dateien zu suchen welche Unicodezeichen enthalten muss der /U Kommandozeilenparameter verwendet werden.
    
        ; Es wird solange gewartet, bis der Prozess mit der Prozess-ID, welche von Run zurückgegeben wurde, beendet ist.
        ProcessWaitClose($iPID)
    
        ; Liest den Stdout Stream der Prozess-ID welche von Run zurückgegeben wurde. Das kann auch in einer while-Schleife geschehen. Siehe dazu das Beispiel für StderrRead.
        Local $sOutput = StdoutRead($iPID)
    ...