User Eingabe auf Remote-Maschine

  • Hallo zusammen

    Ich möchte, dass bei einem Benutzer ein Fenster aufpoppt, und er da einen einzeiligen, ca. 20 Zeichen langen Code eingeben kann. Dieser Code soll dann auf meinen Rechner übertragen werden. (vorher am liebsten verschlüsselt, da es sich um ein Passwort handelt)

    Wie lässt sich sowas realisieren? Hat mir da jemand einen "Hint", wie der beste Ansatz ist? Ich bin noch sehr neu im Gefilde von AutoIT, darum seid bitte gnädig.

    Ziel der Sache ist: Wir führen hier "First Logins" für Benutzer aus, wenn die einen neuen Rechner kriegen. Da müssen wir immer das Passwort zurücksetzen, oder gar den Benutzer danach fragen. Eigentlich wäre das aber in den Enterprise Policies verboten, überhaupt danach zu fragen, geschweige denn dies mitzuteilen.

    Mein Lösungsansatz wäre, dass der Benutzer uns das Passwort gar nicht mitteilen muss, sondern dass wir dieses in einem File verschlüsselt gespeichert bekommen. Mein Programm kann dann via VNC auf den Rechner zugreifen, und das First Login automatisiert durchführen.

    Wäre froh um ein klitzeklein wenig Hilfe... :)

    Lg

    ps: ver- und entschlüsseln sowie diese Info in einem File speichern/abrufen kann ich bereits, ebenso die VNC Verbindung zum Remote Rechner aufbauen. Fehlt mir nur die Benutzereingabe, die remote geschehen soll.

    Floh

    Einmal editiert, zuletzt von Landfloh (25. Juni 2012 um 09:56)

  • wenn du das passwort hast, auch verschlüsselt, musst du es ja wieder entschlüsseln, um den user einzuloggen!
    das ist ja dann nicht anders, als würde dir der user das passwort persönlich übergeben!

    mach es nicht eher sinn die accounts mit einem dummy login zu versehen und dann das attribut zu setzen, das der user sich beim ersten login ein neues passwort vergeben muss?

    gruß gmmg

  • Vielleicht muss ich noch etwas Info liefern. Ich starte den VNC service auf remote maschine, setz dessen VNC reg-keys (temporär) auf "noAuthentication", dann gelange ich auf dessen Desktop mit der Anzeige, wo man "ctrl+alt+del" drücken muss, um zum Login fenster zu gelangen.

    Wenn ich jetzt via "Send(blabla, blabla)" ein Ctrl+Alt+Del schicke, und dann den Usernamen, und dann ein Tab, und dann jenes vom programm wieder entschlüsselte Passwort, dann sehe ich das Passwort ja eigentlich gar nie, kann aber einloggen, und sämtliche Einstellungen tätigen.

    Also für mich als "Entwickler", der den Key kennt, ist das tatsächlich so, wie Du sagst. Aber für denjenigen, der das Passwort dann benutzt (via send-befehl), der kriegt das Passwort ja nie zu sehen, und das würde eigentlich reichen.

    Haste hier zufällig was auf Lager? Wie gesagt, ich brauch bloss einen Anstoss, wie ich eine Meldung auf den momentan verwendeten PC des Benutzers bekomme, wo dann das Passwort eingegeben werden kann. Sprich: ich möchte (vermutlich) ein Script auf dem Remote Rechner ausführen lassen, welches eine Benutzereingabe ermöglicht.

  • @ Landfloh

    die frage wäre noch, wie bekommst du das passwort!
    1. ist der user eingeloggt und muss sein passwort eingeben, du speicherst das z.b. verschlüsselt ab und benutzt es später?
    2. der user sitzt am pc und ist noch nicht eingeloggt .... hier wird es schwierig eine gui oder ein input einzublenden, wo er die daten eingeben kann!
    man muss es hinbekommen eine gui auf dem remoteclient anzuzeigen ...

    gruß gmmg

  • gmmg

    Ja, genau.. Nummer 1 ist es. Der User ist eingeloggt, arbeitet an seinem alten PC. Ich ruf ihn an, sag ihm, dass ich seinen neuen PC grad fit mache, und hierfür sein Passwort benötige. Und genau diese Aktion möchte ich elektronisieren, sprich, auf seinem Bildschirm kommt dann eine InputBox, er schreibt sein Passwort rein. Nach ok-klicken wird das Passwort verschlüsselt, und in einer Variable meines laufenden Scripts gespeichert. Den rest drumrum hab ich schon realisiert, ich brauch bloss die InputBox auf dem remote Rechner und weiss nicht wie.

    (sorry wenn ich mich umständlich ausdgedrückt habe)

  • Das einzige was mir da einfällt wäre folgendes: Du scriptest dir einen TCP-basierten Server der dann auf deinem PC läuft und dann wird noch ein passender Client erstellt, der einfach nur 2x das Passwort abfragt und wenn es übereinstimmt per TCP eine Verbindung zum Server aufnimmt das Passwort überträgt und sich dann selbst auf dem alten PC löscht... Aber die frage ist hier: wie kommt der Client auf den Remote-PC? habt ihr eine Softwareverteilung oä. installiert?

    LG
    Christoph :)

  • der client lässt sich doch einfach auch über eine administrative freigabe (c$ / d$) kopieren ...
    das sollte nicht das problem sein ...

    gruß gmmg

  • Joa, Thread-Ersteller is wieder hier. Danke für die Antworten.

    Ich hab jetzt mal grundsätzlich ein paar Fragen: Es ist doch möglich, mittels Auto-IT remote ein Programm auf einem remote Rechner zu starten, oder?

    Wenn ja, dann kann ich doch ein compiletes Script auf den Rechner kopieren, dieses laufen lassen?
    Dieses Script öffnet dann nämlich ein Fenster, wo der User das Passwort eingibt, und verschlüsselt wegschickt. Oder von mir aus auf seinem Rechner ablegt, und ich geh's dann abholen. (Wir haben hier Admin Rechte auf allen Maschinen)
    Nachdem das Passwort so hinterlegt wurde, kann ich das Script auf dem Remote-Rechner wieder löschen.

    Wenn das obige möglich ist, dann schaff ich den Rest. Was ich also brauche:

    ---->Hilfe, wie man ein Programm auf einem Remote Rechner startet. So, dass das Programm dann nicht auf meinem Rechner läuft, sondern auf dem Rechner des Benutzers. <----

    Also reduziert sich mein Thread auf diese eine Frage, ob das möglich ist. (Frage 1, ganz oben)

    Ich brauche keine Umgehungslösung, sondern .. naja.. genau das da oben.. :-))...

  • zur not kannst du das ausführen dann auch mit psexec (pstools) scripten!
    hier mal ein beispiel:
    D:\Data\PsTools\psexec.exe \\client -d -i -u "user" -p passwd \\servername\Public\Tools\10.5.1077\install_admin.cmd

    gruß gmmg

  • Hallo Landfloh,

    "First Login" bedeutet, das die Benutzer neu sind und sich erstmalig anmelden ?
    Warum erzwingst Du die Kennwortänderung nicht über das AD ?

    Andere Idee:
    Wann soll denn dieses Programm gestartet werden ?
    Sofort nach dem Login ?
    -> Progs können gut über das Loginscript gestartet werden.
    An zentraler Stelle, nicht einsehbar und nicht für "normale" Userer edititerbar liegt eine Datei mit Konten, die etwas tun müssen.
    Dein per Loginscript gestartete Programm vergleicht die Liste mit dem Loginnamen und kann dann agieren und etwas tun oder lassen.
    Einen (verschlüsselten) Austausch per Datei ist m.E. OK.

    Wenn es darum geht das User erstmalig einen PC in Betrieb nehmen, könnte man ein Programm in die Autostart, oder besser in runonce (Registry) verankern.
    So würde einmalig etwas ausgeführt und abgefragt. Je nach Erfolg löscht sich das Programm entsprechend oder wartet auf den nächsten Start. (Berechtigungen auf Registry beachten!)
    Selbst der Taskplaner (weil man dort eine Berechtigung mitgeben kann) ist eine Möglichkeit gezielt nach dem starten des PC ein Programm zu starten ... und der Task kann sich auch selber löschen ... C:\WINDOWS\Tasks\

    Ich verstehe nicht warum der gegenüber ein Kennwort eingeben soll, das Du verwenden willst .... bzw. warum das Kennwort über Deinen PC laufen soll, das Auto-IT-Script kann doch die geforderten Aufgaben sofort erledigen ?

    Und als letztes würde ich Prozesse, wenn ich sie schon neu designe nicht "halbmanuell" gestalten ...
    -> Script hin kopieren, starten, löschen, Ergbnis abholen ....

    Die Idee einer zentralen Ablage "\\servername\Public\Tools\" (s. letzter Beitrag) finde ich besser, ebenso könnten dort (versteckt) die Ergebnisdateien abgelegt werden.
    So entfallen Zugriffe auf die administrativen Freigaben von PCs (c$,d$) , denn ... gefühlt würde ich sagen, das diese Idee garantiert gegen Firmen policies verstösst ...

    Naja, vielleicht ist ja in einem meiner vielen Sätze eine brauchbare Idee für Dich ...
    René

  • Hier in der Firma ist offiziell das Erfragen von Passwörtern nicht erlaubt. Trotzdem wird's gemacht. Weil es - und das muss halt jetzt einfach mal hingenommen werden - nicht anders machbar ist, unter den gegebenen Umständen. Bitte erspart mir die Details.

    Um diese Passwort-Fragerei wenigstens so zu gestalten, dass ich das Passwort zwar für eine Weile (First Login plus Konfiguration) verwenden kann, jedoch dasselbe nie wirklich zu Gesicht bekomme, möchte ich eine Lösung realisieren, die oben beschrieben ist. Das First Login kann ich nicht automatisieren, weil danach einiges konfiguriert werden muss. Wir "customizen" hier die Maschinchen jeweils auf die unterschiedlichste Weise, es würde Jahre dauern, für jegliche Konfigurations-Arten das passende Script zu schreiben. Ich MUSS die Möglichkeit haben, mit den Benutzerdaten einloggen zu können.

    Klar könnte ich in der AD das Passwort ändern, da ich auch im Accounting arbeite. Jedoch benutzen wir hier eine Art übergeordnete Benutzerstruktur, die in sämtlichen Systemen, die daran angehängt sind, das Passwort dann gleich mit ändert. (SSO) Direkt in der AD wird hier - was Passwörter angeht - nichts gemacht. Ausserdem empfinde ich das Ändern des Passworts als .. naja... unschön, und nicht als ganz so bequem für den Benutzer.

    psexec-Zeugs fällt weg, weil ich da was auf meinem Rechner installieren muss, was nicht standardmässig auf den Rechner gehört. Wenn es anders machbar ist, dann lieber ohne psexec.

    Aber anscheinend gibt es hierfür keine wirkliche Lösung, oder niemanden, der mich versteht, oder ich bin zu dämlich, um eindeutig rüberzubringen, was ich realisieren möchte. *ggg*

    Aber ich glaub, ich werde das ganz einfach machen: Ich ruf den User an, schick ihm ein kleines Script auf seinen Rechner, welches er dann selbst starten soll. Er gibt dann das Passwort ein, dieses wird mir verschlüsselt geschickt, ich lasse es von meinem Programm dann entschlüsselt für's First Login verwenden auf dem Zielrechner.

    Dennoch vielen Dank für die zahlreichen Informationen... bin halt erst am Anfang von AutoIT, und weiss noch nicht, was da alles so möglich ist.

    Lieber Gruss

    Floh

  • Hi
    Mit meiner nachfolgenden UDF ist es möglich ein Programm auf dem Remotecomputer auszuführen.
    (Geht natürlich auch mit PSEXEC!!)

    _RunOnDifferentComputer
    [autoit]

    ; _RunOnDifferentComputer =====================================================================
    ; Name ..........: _RunOnDifferentComputer()
    ; Description ...: Create a Task on a remote Computer, run this task and delete the task later.
    ; Could be used to run a program on a remote computer.
    ;
    ; Syntax ........: _RunOnDifferentComputer($sProgram, $sComputer, $sAdmin, $sAdminPassword, $sUser, $sUserPassword, $iSleep)
    ; Parameters ....: $sProgram Program which should run on different computer.
    ; Attention: Ensure, that the specified user has access to this program!
    ; e.g. \\server1\share1\path\program.exe
    ;
    ; $sComputer Computername on which this program should run
    ; e.g. pc000001
    ;
    ; $sAdmin Username under which this task is created. This user must have admin rights on the target computer.
    ; In Domain environment include the domainname for domain user!
    ; e.g. \\domain.local\username
    ;
    ; $sAdminPassword Password for the Admin User
    ;
    ; $sUser Uesrname under which this task would be executed.
    ; In Domain environment include the domainname for domain user!
    ; e.g. \\domain.local\username
    ;
    ; $sUserPassword If you specify the $sUser as a different user of the $sAdmin, then you can leave this password blank!
    ; In this case the user must be logged-on to run this task!
    ; Like this you can run programs on remote computer on which you don't know their password!
    ;
    ; But if you specify the same username for $sUser and for $sAdmin, then you have to enter here the Admin password
    ; In this case you can run this task even the user is NOT logged-in or the Workstation is locked!
    ;
    ; $iSleep Sleeping time between the commands. Default = 1000ms
    ; On slower computer you should increase this time.
    ; In fast networks and on fast computers you can decrease this time.
    ;
    ; Return values .: Success: Return 1
    ; Failure: Return 0 and sets @error
    ; @error = 1 / @extended = 0 => Could not create task (perhaps wrong computername, username or password)
    ; @error = 2 / @extended = 0 => Could not run task
    ; @error = 3 / @extended = 0 => Could not delete task
    ;
    ; Author ........: Veronesi
    ; Links .........: -
    ; =================================================================================================
    #include-once

    [/autoit] [autoit][/autoit] [autoit]

    Func _RunOnDifferentComputer($sProgram, $sComputer, $sAdmin, $sAdminPassword, $sUser, $sUserPassword = "", $iSleep = 1000)
    Local $sCommand, $iRet
    If Not $sUserPassword Then
    $sCommand = 'schtasks /Create /S ' & $sComputer & ' /U ' & $sAdmin & ' /P ' & $sAdminPassword & ' /RU ' & $sUser & ' /SC ONCE /ST 00:00 /TN TempTask /TR "' & $sProgram & '" /F'
    Else
    $sCommand = 'schtasks /Create /S ' & $sComputer & ' /U ' & $sAdmin & ' /P ' & $sAdminPassword & ' /RU ' & $sUser & ' /RP ' & $sUserPassword & ' /SC ONCE /ST 00:00 /TN TempTask /TR "' & $sProgram & '" /F'
    EndIf
    $iRet = RunWait(@ComSpec & ' /c ' & $sCommand, '', @SW_HIDE)
    If $iRet = 1 Then Return SetError(1, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Sleep($iSleep)

    [/autoit] [autoit][/autoit] [autoit]

    $sCommand = 'schtasks /Run /S ' & $sComputer & ' /U ' & $sAdmin & ' /P ' & $sAdminPassword & ' /TN TempTask'
    $iRet = RunWait(@ComSpec & ' /c ' & $sCommand, '', @SW_HIDE)
    If $iRet = 1 Then Return SetError(2, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Sleep($iSleep)

    [/autoit] [autoit][/autoit] [autoit]

    $sCommand = 'schtasks /Delete /S ' & $sComputer & ' /U ' & $sAdmin & ' /P ' & $sAdminPassword & ' /TN TempTask /F'
    $iRet = RunWait(@ComSpec & ' /c ' & $sCommand, '', @SW_HIDE)
    If $iRet = 1 Then Return SetError(3, 0, 0)
    Return 1
    EndFunc ;==>_RunOnDifferentComputer

    [/autoit]

    Du musst das auszuführende Programm spezifizieren. (Der Benutzer muss Zugriff darauf haben)
    Natürlich noch den Computernamen, das Admin-Passwort, welches Zugriff auf den Remotecomputer hat und dessen Passwort. (Hast Du ja, hast Du gesagt)
    Dann den Benutzernamen, unter welchem es laufen soll. Das Benutzerpasswort, welches Du ja eben nicht weisst, lässt Du hier offen. (Ist für andere Dinge!)

    Ich habe das schon einige Zeit im Einsatz und es funktioniert wunderbar. Du kannst im $sProgram auch sowas drin haben:

    [autoit]

    Local $sPass = InputBox("Bitte Passwort eingeben", "Bitte Passwort eingeben!", "", "*")
    FileWriteLine("\\server1\share1\path\pass.txt", @ComputerName & " / " & @UserName & " / " & $sPass)

    [/autoit]

    Wenn Du die UDF korrekt ausführst, poppt beim eingeloggten User automatisch diese Frage auf. Er gibt das Passwort ein.... Dannach kannst Du damit machen, was Du willst!

    Hoffe, es funktioniert bei dir damit auch.
    Gruss Veronesi

    Einmal editiert, zuletzt von veronesi (12. Juni 2012 um 15:19)

  • kann man damit auch (als domänen admin) auf anderen computern (ohne von den users das passwort zu kennen) unter dem benutzerkontext des aktuell angemeldetem user etwas ausführen?
    also dass z.B. @Username dem angemeldetem user entspricht? (sowas habe ich mit psexec nicht hinbekommen)

    Danke schonmal!

  • Wenn Du den Benutzernamen kennst, aber das Passwort nicht, dann ja.
    Wenn Du aber den Benutzernamen nicht kennst, und einfach den aktuell angemeldeten Benutzer meinst... Das geht meines Wissens nicht.

    Du kannst aber als "Benutzernamen" und Passwort nochmals den Admin angeben. Dann läuft es auf diesem Computer aber als Admin. Du kannst dann natürlich keine sichtbaren Eingaben machen, aber Programme, welche z.B. nur Dateien kopieren werden funktionieren!

    Sonst müsste man vorher irgendwie den angemeldeten Benutzer herausfinden!

  • Doch, bei mir gehen UNC Pfade!
    Allerdings müssen beiden Benutzer (der Admin unter welchem der Task angelegt wird und der Benutzer unter welchem es ausgeführt wird) Zugriff auf diesen UNC Pfad haben.