[gelöst] bash Script für freerdp

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

[gelöst] bash Script für freerdp

Beitrag von joe2017 » 06.07.2021 16:09:13

Hallo zusammen,

ich habe ein kleines Script mit einer YAD Benutzeroberfläche für meinen freerdp Aufruf geschrieben.
Mit YAD frage ich lediglich Benutzer und Passwort ab. Anschließend wird meine Server Verbindung gestartet.

Jetzt kommt meine Frage:
Wenn ich ein falsches Passwort eingebe, sehe ich mit dem Script keine Meldung und das Fenster schließt sich bzw. die RDP Verbindung startet nicht.
Wenn ich den freerdp Befehl (xfreerdp /v:serverip:port /d:domain /u:user /p:password) in dem Terminal eingeben, sehe ich am Ende folgende Zeile mit der Fehlermeldung:

Code: Alles auswählen

[WARN][com.freerdp.core.nla] - SPNEGO received NTSTATUS: STATUS_LOGON_FAILURE...
Kann ich das innerhalb meines Scripts abfangen/abfragen um dem Anwender anschließend eine entsprechende Meldung auszugeben (Passwort falsch, Passwort abgelaufen, usw.)?
Wie kann ich das im Script prüfen bevor dies beendet wird?

Für eure mithile wäre ich sehr Dankbar.
Zuletzt geändert von joe2017 am 08.07.2021 07:28:16, insgesamt 1-mal geändert.

Benutzeravatar
MSfree
Beiträge: 10721
Registriert: 25.09.2007 19:59:30

Re: bash Script für freerdp

Beitrag von MSfree » 06.07.2021 16:13:16

Hälst du das für eine gute Idee?

Mit dem Befehl

Code: Alles auswählen

ps augx | grep -i xfreerdp 
könnte jeder Benutzername und Paßwort der bestehenden Verbindungen auslesen. Dem Abgreifen von Zugangsdaten steht damit Tür und Tor auf.

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: bash Script für freerdp

Beitrag von joe2017 » 06.07.2021 16:21:54

Hallo MSfree,

danke für den Hinweis. Aber ich habe natürlich das passwort mit :H als crypt gekennzeichnet.
Somit kann ich zwar den Benutzernamen aber nicht das Passwort (*****) auslesen.

Aber super Info!
Vielen Dank

Benutzeravatar
MSfree
Beiträge: 10721
Registriert: 25.09.2007 19:59:30

Re: bash Script für freerdp

Beitrag von MSfree » 06.07.2021 17:23:36

joe2017 hat geschrieben: ↑ zum Beitrag ↑
06.07.2021 16:21:54
Aber ich habe natürlich das passwort mit :H als crypt gekennzeichnet.
Es geht darum, daß du

Code: Alles auswählen

xfreerdp /v:serverip:port /d:domain /u:user /p:password
mit Paßwort im Klartext aufrufst. Die Kommandozeile läßt sich mit dem o.g. ps-Befehl sichtbar machen, sobald die RDP-Verbindung aufgebaut wurde.

Die Kommandozeilenparameter kann man nicht verschlüsseln.
Somit kann ich zwar den Benutzernamen aber nicht das Passwort (*****) auslesen.
Doch!
Aber probier es selbst aus.

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: bash Script für freerdp

Beitrag von joe2017 » 06.07.2021 17:36:58

Ich habe das direkt getestet. Mir wurde der Benutzer angezeigt und das Passwort nur mit *****.

Ich werde das morgen trotzdem noch mal versuchen. Aber dafür müsste erstmal jemand auf diesem PC während der rdp Verbindung, einen Befehl absetzen können. Der Client hat Firewall technisch keine offenen ports aus 2-3 ausgehende (local subnet) ports. Ich denke das wird ziemlich schwer werden.

Aber ich nehme deine Anmerkungen trotzdem ernst und prüfe das gleich morgen.

Ich arbeite in dem Script übrigens mit Variablen (User, Passwort) die ich anschließend wieder überschreibe.

Hast du eine Idee zu meiner ursprünglichen Frage?

Benutzeravatar
MSfree
Beiträge: 10721
Registriert: 25.09.2007 19:59:30

Re: bash Script für freerdp

Beitrag von MSfree » 06.07.2021 18:59:09

joe2017 hat geschrieben: ↑ zum Beitrag ↑
06.07.2021 17:36:58
Hast du eine Idee zu meiner ursprünglichen Frage?
Ich gehe davon aus, daß xfreerdp seine Ausgaben auf stderr ausgibt. Das kann man natürlich in eine Datei oder in eine Variable in deinem Skript ausgeben und anschließend analysieren.

Code: Alles auswählen

xfreerdp /v:serverip:port /d:domain /u:user /p:password 2> Datei_stderr.txt
schreibt die stderr-Ausgaben in die Datei "Datei_stderr.txt".

Code: Alles auswählen

xfreerdp /v:serverip:port /d:domain /u:user /p:password 2>&1
leitet stderr auf stdout um.

Code: Alles auswählen

output=`xfreerdp /v:serverip:port /d:domain /u:user /p:password 2>&1`
echo $output
schreibt stdout und stderr in die Variable output, die ich hier mal mit echo ausgebe.

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: bash Script für freerdp

Beitrag von joe2017 » 07.07.2021 07:12:01

Doch!
Aber probier es selbst aus.
Also ich habe das heute noch einmal überprüft. Das Passwort wird nur mit ***** angegeben.

Benutzeravatar
MSfree
Beiträge: 10721
Registriert: 25.09.2007 19:59:30

Re: bash Script für freerdp

Beitrag von MSfree » 07.07.2021 08:21:40

joe2017 hat geschrieben: ↑ zum Beitrag ↑
07.07.2021 07:12:01
Also ich habe das heute noch einmal überprüft. Das Passwort wird nur mit ***** angegeben.
Und was liefert

Code: Alles auswählen

ps -e | grep xfreerdp | awk '{print "cat /proc/"$1"/cmdline"}' | sh

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: bash Script für freerdp

Beitrag von joe2017 » 07.07.2021 09:38:23

Auch dann werden nur dei *** angezeigt. :mrgreen:

Aber kannst du mir zufällig noch bei etwas helfen?
Ich habe mit YAD einen button erstellt welcher anschließend ein anderes Script startet.

Code: Alles auswählen

--button=OK:"/path/to/script.sh"
Das funktioniert auch soweit. Ich drücke den OK Button und das Script wird ausgefürt. Jedoch wird das YAD Fenster mit dem OK Button nicht beendet. Gibt es hier ein Trick?

Benutzeravatar
MSfree
Beiträge: 10721
Registriert: 25.09.2007 19:59:30

Re: bash Script für freerdp

Beitrag von MSfree » 07.07.2021 09:50:34

Du kannst versuchen, das Skript oder xfreerdp im Hintergrund zu starten, in dem du ein Kaufmannszeichen "&" hinter den Befehl stellst.

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: bash Script für freerdp

Beitrag von joe2017 » 07.07.2021 09:57:21

Das öffnen ist ja nicht das Problem.
Das Problem ist, dass mein Fenster mit dem Button nicht geschlossen wird.

Hintergrund ist folgender.
- Ich habe ein YAD Fenster mit der RDP Anmeldung
- Anschließend prüfe ich diverse Fehlermeldung (passwort falsch, benutzer gesperrt, benutzer muss passwort ändern)
- Auf die jeweilige Meldung reagiere ich mit einem neuen YAD Fenster und der jeweiligen Fehlerbeschreibung (Ihr Passwort ist abgelaufen..... usw.)
- In diesem Fenster habe ich einen OK Button welcher in verschiedenen Fällen ein anderes YAD Anmelde Fenster bringt.

Das funktioniert auch alles. Nur das Fenster mit dem Button welches die neuen Fenster öffnet, wird nicht beendet.

Benutzeravatar
MSfree
Beiträge: 10721
Registriert: 25.09.2007 19:59:30

Re: bash Script für freerdp

Beitrag von MSfree » 07.07.2021 10:21:38

Ich kenne YAD im speziellen nicht, aber typischerweise beendet sich ein Parentprocess erst, wenn der Childprocess beendet wird. Pareent ist in deinem YAD und Child ist xfreerdp. Daher ja auch meine Empfehlung, xfreerdp so aufzurufen:

Code: Alles auswählen

xfreerdp /v:serverip:port /d:domain /u:user /p:password &
Das legt den xfreerdp-Prozess in den Hintergrund und gibt die Kontrolle an das Parentprogramm zurück, das sich dann (vielleicht) beendet.

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: bash Script für freerdp

Beitrag von joe2017 » 07.07.2021 13:01:21

Aber das Problem ist gerade nicht xfreerdp. Das Fenster wurde ja bereits beendet.
Freerdp beendet sich automatisch wenn ein Fehler kommt. Diesen Fehler lese ich aus und öffne ein weiteres YAD Fenster mit der Fehlermeldung.

Anschließend möchte ich in YAD lediglich mittels OK Button ein neuen Script starten. Das funktioniert ja auch.
Aber das YAD Fenster mit dem OK "öffne script" Button bleibt geöffnet und schließt sich nicht.

Normalerweise kann man einen Button mit 0 anlegen. Dieser beendet auch das Fenster.

Code: Alles auswählen

--button=OK:0
Aber folgende Zeile öffnet nur das Script und lässt das Fenster offen:

Code: Alles auswählen

--button=OK:"/path/to/script.sh"
Man muss doch mit dem Button etwas öffnen können und anschließend das aktuelle Fenster schließen.

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: bash Script für freerdp

Beitrag von JTH » 07.07.2021 13:23:26

joe2017 hat geschrieben: ↑ zum Beitrag ↑
07.07.2021 13:01:21
Man muss doch mit dem Button etwas öffnen können und anschließend das aktuelle Fenster schließen.
Nope, laut Manpage geht das explizit nicht:
man yad hat geschrieben:--button=BUTTON:ID
[…] If ID have a non-numeric value it treats like a command and click on such button doesn't close the dialog.

Müsstest du über den Exitcode lösen:

Code: Alles auswählen

yad --button=Yip:0 --button=Nope:1 …

if [ $? -eq 0 ]; then
    xfreerdp …
fi
oder

Code: Alles auswählen

if yad --button=Yep:0 --button=Nope:1 …; then
    xfreerdp …
fi
oder ähnlich für dich passend.
Manchmal bekannt als Just (another) Terminal Hacker.

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: bash Script für freerdp

Beitrag von joe2017 » 08.07.2021 07:28:03

Guten Morgen JTH,

vielen Dank für deine Hilfe! :hail:
Die letzte Version habe ich getestet und das hat direkt funktioniert.
Ich verrstehe zwar nicht, warum es eine solche Funktion in YAD nicht direkt gibt? Aber gut...

Vielen Dank allen zusammen!

Antworten