Laden...

[Erledigt] Prüfen, ob eine Remoteverbindung vollständig aufgebaut wurde (und kein Abbruch vorkam)

Erstellt von Mr. Belvedere vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.929 Views
M
Mr. Belvedere Themenstarter:in
8 Beiträge seit 2016
vor 7 Jahren
[Erledigt] Prüfen, ob eine Remoteverbindung vollständig aufgebaut wurde (und kein Abbruch vorkam)

Hallo liebe Community,

Ich habe ein ähnliches (eigentlich fast identisches) Problem wie das in diesem Thread:

Abfrage auf Remote Verbindung

Allerdings funktioniert die dort letztendlich benutze Lösung für mich nicht.

Aber mal von vorne...

Wir nutzen in der Firma ein Programm dessen Datenbank und Administrations-Tools auf einem Server liegen. Aus diversen Gründen müssen wir da ab und an per Remote Verbindung rauf.

Wir haben allerdings nur einen Login. Dementsprechend wird der aktive User vom Server geschmissen wenn ein anderer sich verbindet.

Ich hatte nun vor ein kleines Tool zu schreiben, welches auf einem Netzlaufwerk liegt. Damit kann man die Verbindung über die mstsc aufbauen. Gleichzeitig schreibt das Programm eine Datei aufs Netzlaufwerk, in der der aktuelle Nutzer hinterlegt ist. So weiß der nächste Nutzer, dass er keine Verbindung aufbauen sollte und hat auch gleich den Nutzer den er kontaktieren muss, falls er eilig auf den Server muss.

Das funktioniert soweit ganz gut.

Das Programm prüft über tcpconnectioninformation ob eine Verbindung zum Server auf dem port 3389 besteht.

Im laufenden Betrieb haben sich jetzt allerdings ein paar Probleme mit dieser Herangehensweise herauskristallisiert.

Wenn ich die mstsc ausführe (ich übergebe die Server IP per Parameter), wird die tcp Verbindung bereits hergestellt, bevor der Nutzer das Passwort eingegeben hat.

Wenn eine Verbindung besteht, wird die Datei, in der der Nutzer steht, überschrieben. (Manchmal erreicht man den Kollegen nicht der auf dem Server ist, oder jemand hat vergessen sich zu deconnecten und ist aus dem Büro, sodass in dringenden Fällen auch mal jemand gekickt werden muss.)

Wenn der Nutzer sich jetzt aus irgendeinem Grund nicht anmeldet (wird plötzlich anderweitig gebraucht, Anmeldung funktioniert nicht [hatten wir alles schon mehrfach], steht der falsche Nutzer in der Datei.

Meine frage wäre daher, ob es eine möglichkeit gibt, zu prüfen, ob eine remote Verbindung vollständig aufgebaut wurde.

Die Lösung im o.g. Thread schien mir vielversprechend. Hier wurde mit query user der aktuelle Nutzer auf dem Server abgefragt. Das funktioniert allerdings nicht, da die Nutzermaschienen nicht die erforderlichen Rechte haben.

Habt ihr da eine Idee?

Viele Grüße
Mr. Belvedere

PS: bitte entschuldigt wenn ich das in dem alten Thread hätte posten sollen. Da war ich mit unsicher. Das Problem im alten Thread ist ja gelöst gewesen.

3.170 Beiträge seit 2006
vor 7 Jahren

Hallo,

Ideen schon - die einfachste wäre wahrscheinlich, die Berechtigung zu erteilen, wobei ich mal davon ausgehe, dass das nicht in Frage kommt - jedenfalls nicht direkt.
Du könntest aber evtl. versuchen query session unter einem anderen Benutzer ausführen zu lassen (Stichwort Impersonation), wobei Du dafür dann wahrscheinlich auch die Rechte nicht hast. Aber Du kannst es Dir ja trotzdem mal anschauen.

Eine andere Möglichkeit wäre, einen Dienst zu schreiben, der auf dem Server läuft und von dort ermittelt, ob der Remotebenutzer angemeldet ist. Diesen Dienst könntest Du mit Deinem Programm ansprechen und so die gewünschte Information erhalten.
So ein Dienst könnte natürlich auch auf jedem anderen Server in de rDomäne oder sogar auf den Clients liegen, vorausgesetzt, er läuft unter einem Benutzerkonto, das Berechtigungen für query session hat. Den könntest Du dann auch abfragen mit Deinem Programm.

Eine Idee wäre noch, ein Login-Script für den Remotebenutzer auf dem Server anzulegen, das die Datei auf dem Netzlaufwerk anlegt, und ein Logout-Script, das sie wieder löscht.
Ich weiss allerdings jetzt aus dem Stegreif nicht, ob und wie Du dann an den tatsächlichen Benutzer kommst, der die Verbindung aufgebaut hat. Wenn Du das hinkriegst, ist das sicherlich die einfachste Möglichkeit.

Wenn nicht, ließe sich diese Hürde aber ggf. durch eine zweite Datei umgehen: eine legst Du mit dem Benutzer an wie bisher auch, die andere wie oben beschrieben vom Server. Nur wenn auch die zweite Datei existiert, gibt es auch eine Remotesession. Das bringt Dir aber nix im Bezug darauf, dass der falsche Benutzer weiterhin in der Datei landen würde. Und irgendwie erscheint das alles irgendwie von hinten durch die Brust ins Auge.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

M
Mr. Belvedere Themenstarter:in
8 Beiträge seit 2016
vor 7 Jahren

Hallo MarsStein,

vielen Dank für die Ideen!

Ja wegen den Berechtigungen habe ich heute mal die IT angesprochen. Ich wurde angesehen als ob ich nach der Erlaubnis gefragt habe ein paar Root-kits zu installieren 😁

Daraus wird leider nichts. Auch einen Dienst für den Server zu programmieren wurde mir direkt untersagt.

Sie haben sich dann allerdings bei einem Login-Script erweichen lassen.

Ich werde es dann folgendermaßen versuchen:

Das Script schreibt wie vorgeschlagen eine Datei auf das Netzlaufwerk. Über netstat werde ich mir die IP des aktiven Remote Nutzers holen und diese in die Datei packen.

Mein Programm schreibt dann seinerseits erst den neuen Nutzer in die ursprüngliche Datei, wenn er die eigene IP mit der IP verglichen hat, die das Login-Script in die 2. Datei auf dem Netzlaufwerk geschrieben hat.

Ich denke das könnte sehr anständig funktionieren.

Nochmals vielen Dank für die Hilfe!

Falls noch jemandem eine andere Möglichkeit einfällt, gerne her damit!

Ich bin immernoch etwas überrascht, dass es keine einfache Möglichkeit gibt, auf dem Rechner, der die Verbindung zum Remote Server aufbaut, zu prüfen welchen Status die Verbindung hat 🤔

Viele Grüße
Mr. Belvedere

Edit: Auch vielen Dank an den freundlichen Themennamenverbesserer (bin scheinbar zu doof zu entdecken, wo steht wer es war) Das ist in der tat präziser. Ich tue mich bei aussagekräftigen Titeln immer schwer 😉

16.842 Beiträge seit 2008
vor 7 Jahren

Wollt ihr das Problem nicht an der Wurzel packen und die allgemeine Herangehensweise ändern?
Langfristig besser als Frickellösungen 😉

M
Mr. Belvedere Themenstarter:in
8 Beiträge seit 2016
vor 7 Jahren

Hallo Abt,

ich nehme an Sie meinen den Login über einen Account?

Ich stecke da leider nicht tief genug drin. Aber mir wurde erklärt, dass das aus lizenztechnichen Gründen (auf dem Server sind Admin-Tools für unser DMS Programm installiert) nicht möglich ist.

Wenn Sie etwas anderes meinen, können Sie das gerne näher ausführen =)

Viele Grüße
Mr. Belvedere

16.842 Beiträge seit 2008
vor 7 Jahren

Mich kann man hier ruhig duzen 😉

Entweder via Terminalserver oder eben mit eigenen Logins.
Wenn das Lizenztechnische Gründe hat.. dann verwendet ihr wohl einen User, damit nur ein mal Lizenzkosten fällig sind.
Dran denken, dass solche Lizenzen oft Sammeluser verbieten 😉

Mit qwinsta könnt ihr euch die aktiven Sessions auflisten lassen.
qwinsta /server:<ip>

M
Mr. Belvedere Themenstarter:in
8 Beiträge seit 2016
vor 7 Jahren

Bin nicht so firm in der forenwelt. Wollte nicht unhöflich sein!
Aber sehr nett von dir 😉

Qwinsta liefert leider immer "no session exists for *" auch wenn ich auf dem server bin. Mir wurde gesagt, dass das wohl an fehlenden Rechten liegt (die unsere IT nicht einräumen möchte)!

16.842 Beiträge seit 2008
vor 7 Jahren

Meine frage wäre daher, ob es eine möglichkeit gibt, zu prüfen, ob eine remote Verbindung vollständig aufgebaut wurde.

Wenn der User das Anmeldefenster hat, aber sich noch nicht angemeldet hat, dann ist die Verbindung trotzdem gültig und vollständig aufgebaut. So funktioniert RDP eben.
Ohne vollständige Verbindung kann ja auch keine Authentifizierung erfolgen.

Deine Frage sollte also eher lauten: ist eine Session aufgebaut und noch aktiv in Nutzung und ist der Benutzer angemeldet?
Das macht qwinsta. Wenn Du da keine Rechte hast, dann kannst Du das auch nicht prüfen.

Aber ihr solltet eure Herangehensweise zusammen mit eurer IT mal überdenken... 😉
Da kann das Forum aber nicht helfen.

M
Mr. Belvedere Themenstarter:in
8 Beiträge seit 2016
vor 7 Jahren

Dann bleibt in der momentanen Konstellation wohl nur die Frickellösung.

Schade, dass es keine Möglichkeit gibt, qwinsta mit login und Passwort zu füttern um dich zu authentifizieren.

16.842 Beiträge seit 2008
vor 7 Jahren

Du kannst in Windows jeden Befehl mit runas unter einem anderen Kontext ausführen.

M
Mr. Belvedere Themenstarter:in
8 Beiträge seit 2016
vor 7 Jahren

Würde das nicht das Passwort des Nutzers erforden, über dessen account man den befehl ausführen möchte?

16.842 Beiträge seit 2008
vor 7 Jahren

Solche Befehle sind einfache TCP Verbindungen - also unverschlüsselt.
Natürlich gibt es keinerlei Möglichkeit das Passwort mit zu übertragen; wäre ja fatal.
Der RUNAS-User braucht natürlich die Rechte auf dem Zielsystem. 👍

M
Mr. Belvedere Themenstarter:in
8 Beiträge seit 2016
vor 7 Jahren

Entschuldige.. meine Kenntnisse sind da wahrscheinlich eher im anfängerbereich angesiedelt..

Ich meine das, wenn ich einen befehl mit run as ausführe, ich vorher authentifizieren muss, dass ich das auch über diesen nutzer darf?! Ich nahm an dazu bräuchte ich das Passwort des besagten Nutzers, der die erforderlichen rechte hat.

16.842 Beiträge seit 2008
vor 7 Jahren

Korrekt. Ihr braucht einen User mit den Rechten inkl. Passwort. 😉

M
Mr. Belvedere Themenstarter:in
8 Beiträge seit 2016
vor 7 Jahren

Alles klar. Dachte schon ich hätte das völlig falsch verstanden.
Dann werde ich morgen nochmal meine IT besuchen.

Und wenn das keine Option ist, auf die man sich dort einlassen möchte, werde ich versuchen das über die "von hinten durch die Brust ins Auge" Variante (wie MarsStein es so trefflich formuliert hat) mit Login Script zu lösen!

Nochmals vielen dank an MarsStein und Abt, für eure Unterstützung!

Viele Grüße
Mr. Belvedere