SSH Passwort falsch

  • Hallo allerseits,

    ichhabe ein kleiens Problemchen, vielleicht kann ja jemand helfen und weiss wie es geht. Ich habe ein kleines Scrpzchen, um auf meinem root server einen Befehl auszuführen, hier exemplarisch ein restart des webservers. Das funktioniert auch, leider erkennt er nicht wenn ein falsches Kennwort eingegeben wird, also auf der ssh konsole Access denied erscheinen würd. Kenne mich mit den Umleitungsgeschichten noch nicht so aus, hier das kleine script:

    Vielen dank schon mal und einen schönen Rest Sonntag

    lg

    Einmal editiert, zuletzt von casi4712 (5. November 2023 um 14:24)

  • okidoki, danke erst mal, ich schau mir das morgen mal an, klingt interessant.

    lg

    Ich sehe gerade ich hoffe wir haben nicht aneinnder vorbei geredet, dass was du angehängt hat generiert ja einen MD5 Key, Ich habe ja für meinen Server ein Passwort, ich möchte das aber ungern in der autoit speichern, wär natürlich das einfachste. Die Sicherheit des Servers ist auch gewährleistet durch Zufügen des Zertifikats in die Registry, das ist also nicht das Problem, aber die Rückmeldung wenn ein falsches Passwort eingegeben wurde an autoit, da habe ich halt noch keine Lössung für.

    Einmal editiert, zuletzt von casi4712 (9. Oktober 2023 um 00:26)

  • Kannst Du auf dem Server irgendwie in eine Datei schreiben, wenn das Pw falsch ist?
    Wenn ja, könntest Du im Skript abfragen, ob es die Datei gibt und wenn, ob da z.B. eine 1 steht für Passwort okay.
    Du sendest ja etwas an einen Server und Du brauchst eine Rückmeldung. So könnte ich es mir vorstellen.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Kannst du dir nicht die Ausgabe holen per

    AutoIt
    Local $iPID = Run(@ComSpec & " /c " & 'adb tcpip 5555', @SystemDir, @SW_HIDE, $STDERR_MERGED) ; $STDERR_CHILD + $STDOUT_CHILD); hier wäre dein Aufruf
    Local $sOutput = ""
    
    Do
        $sOutput &= StdoutRead($iPID)
    Until @error

    Und dann $stdout auswerten?

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

    Code
    adb tcpip 5555

    oder ist das nur exemplarisch gemeint, adb kenne ich von meinem Handy;)

    danke und bis spädder

  • Folgendes könnte irrelevant für dich sein aber eventuell hilft es dir weiter:

    Passwörter bei Automatisierungen mitzugeben ist bewusst bei nahezu allen ssh Implementierungen unterbunden. Ja genau das scheinst du ja auch gar nicht zu tun - Ich weiß.

    Die Alternative hierzu lautet komplexe Keys auszutauschen. Auf dem client werden diese dann auch meist noch gesichert abgelegt.

    Bei Verwendung dieser Methode kann man z.b. openssh sagen, dass derjenige, welcher sich mit diesem Key angemeldet hat nur ganz bestimmte Befehle ausführen darf.

    Da du ja nur von einem Befehl sprichst, wollte ich darauf hinweisen. So kann ein User der sich mit dem bestimmten Key anmeldet eben nur das ausführen und sonst nichts - unabhängig davon, welche Rechte dieser User auf dem Server sonst hat.

    Der Schlüsselaustausch ist auch easy - google einfach mal nach ssh-copy-id.

    Wie gesagt: kann am Thema von dir vorbei gehen, da ich den zu Anwendungsfall ja nicht genau kenne.

  • Anstatt dem adb... muss dein Befehl rein, also:

    AutoIt
    Local $iPID = Run(@ComSpec & " /c " & $PSCommand, @SystemDir, @SW_HIDE, $STDERR_MERGED) ; $STDERR_CHILD + $STDOUT_CHILD)
    Local $sOutput = ""
    
    Do
        $sOutput &= StdoutRead($iPID)
    Until @error
    
    Consolewrite($sOutput & @CRLF)

    Bin aber unsicher wie das mit dem Powershellcommand ist, also ob das da mit dem @Comspec etc. auch so funktioniert.

  • Ich habe noch dieses Beispiel gefunden:

    Code
    __ExampleA()
    Func __ExampleA()
        Local $o_CmdString = ' -command get-module -listavailable'
        Local $o_powershell = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
        Local $o_Pid = Run($o_powershell & $o_CmdString, '', @SW_Hide, $STDERR_CHILD + $STDOUT_CHILD)
        ProcessWaitClose($o_Pid)
    
        Local $o_Output = StdoutRead($o_Pid)
        ConsoleWrite($o_Output & @CRLF)
    EndFunc

    Quelle: https://www.autoitscript.com/forum/topic/20…rom-powershell/

    Musst du natürlich anpassen und danach das $o_Output auswerten.

    Einmal editiert, zuletzt von Moombas (9. Oktober 2023 um 14:54)

  • ne Iddee wäre vielleicht die authlog aus var/logs auf der LinuxSeite zu nutzen, bei erscheinen dann diese 2 Zeilen:

    Zitat

    Oct 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

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

    lg und eine schöne Woche noch

  • Habe das für dich mal ein wenig überarbeitet:

    Einmal editiert, zuletzt von Moombas (10. Oktober 2023 um 13:20)

  • Nur so am Rande.

    Autoit kann Passwörter verschlüsselt z.B. in einer Ini Datei speichern. Wenn man ein Passwort im Source speichern möchte, oder den Schlüssel zu Verschlüsselung, kann man es in einem sinnlos langem Text String verstecken und die Auflösung (Extraktion) als Teil einer Rechenaufgabe. Damit sollte man, auch wenn es primitiv klingt vor den "billigsten Angriffen via Hex Editor geschützt sein... Das kann man natürlich beliebig "verschachteln"

    Also etwa so: $_i = shfuihfgztcfqcvsvsvw3t_++***_##$%&44444848das_ist das Passwort******ojifejiejvwegvnuijnsehvuze6/89

    $i_li = 5*8+2

    $i_re = 6*6

    $_i_real = stringTrimleft ($_i, $_li)

    $_i_real = stringTrimright ($_i_real, $i_re)

    Ps.: Und was nicht nach Passwort oder Schlüssel im Source aussieht wird als solcher auch nicht wahrgenommen. Unsichtbarkeit durch Unauffälligkeit

    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)

  • 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

  • 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

  • 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

    Einmal editiert, zuletzt von casi4712 (10. Oktober 2023 um 17:23)

  • casi4712: Ein gespeichertes Passwort ist nie sicher. Die Frage wäre eher ob sie "sicher genug" ist. Meine Antwort bliebe bei "nein".

    Aber du könntest das anders lösen, wobei ich das dennoch nicht ideal finden würde:

    1. Du speicherst das Passwort AES-256 verschlüsselt in einer (ini) Datei oder registry. Dafür wird zur ver- und Entschlüsselung ein eindeutiger CryptKey benötigt.

    2. Anstatt also das Passwort zu prüfen, prüfst du ob die Entschlüsselung des Passworts mit dem eingegebenen Key mit Passwortvorgaben passt (ggf. Regex und auf Großbuchstaben, Sonderzeichen, mind. Passwortlänge etc. prüfen).

    Meine bisherigen Tests haben bei falschen Cryptkey immer "ÿÿÿÿ" ergeben (ggf. abweichende Länge), was mit dem Regex als Fehlschlag gelten würde.

    3. Wenn Regex passt, kannst du das entschlüsselte Passwort übergeben, wenn nicht: schon hier abbrechen.

    Beispiel für eine AES-256 Verschlüsselung (ohne die Prüfung per RegEx etc.):

    4 Mal editiert, zuletzt von Moombas (11. Oktober 2023 um 10:00)

  • Btw.: Füg mal zwischen Zeile 51 und 52 folgendes ein ProcessWaitClose($pid) und teste erneut.

    Ansonsten hier meine angesprochene Variante (mit Testwerten!):

    2 Mal editiert, zuletzt von Moombas (11. Oktober 2023 um 14:24)