sftp mittels fork verwenden (Passworteingabe?)



  • Hallo Forum,

    ich möchte gerne mittels sftp Daten austauschen. Dazu habe ich zunächst mittels
    fork(), pipe(), dup2() und execlp() mein Programm "geforkt".
    Dies funktioniert auch bestens.

    Ein Problem bereitet mir jedoch die Passworteingabe: Diese scheint nicht über den Standardeingabekanal zu laufen. (Jedenfalls funktioniert "fprintf(write_fd, "passwort\n");" hier nicht.)

    wie bekomme ich das Passwort nach sftp geschickt? Bzw. wie werden generell Passwörter von der Konsole eingelesen?

    Vielen Dank im voraus, Stefan



  • man: write(2) oder man: fdopen(3)

    hast dich gar nicht gewundert, das pipe und co ein int zurück geben und die Standard-C-I/O-Funktionen ein FILE* wollen?



  • Hallo rüdiger,

    vielen Dank für die prompte Hilfe.

    Also fdopen habe ich auch verwendet (vielleicht habe ich mich vorhin ein wenig falsch ausgedrückt).

    Mein Programm funktioniert sehr gut (Habe ein kleines Testprogramm erstellt, welches alle Daten, die es auf der Standardeingabe erhält wieder nach stdout schickt und zusätzlich den Inhalt in eine Datei schreibt.) Und wie gesagt, mit diesem Programm gibt es keine Probleme.

    Wenn ich jetzt aber zum Beispiel sftp oder su oder ähnliches verwenden will und ich
    mein Passwort mit "fprintf(write_fd, "passwort\n");" dahin verschicke, funktioniert das nicht. Und zwar nur bei dem Passwort!

    Das liegt wohl daran, dass das betreffende Prg. (su, sftp) Passworteingaben nicht direkt von stdin abfängt sonder irgendwie anders.

    Das sieht man ja auch, wenn man z.B. su in der Konsole aufruft: Bei der Passworteingabe sind die Buchstaben nicht sichtbar!

    Stefan



  • Pappi schrieb:

    Das sieht man ja auch, wenn man z.B. su in der Konsole aufruft: Bei der Passworteingabe sind die Buchstaben nicht sichtbar!

    Hmm, das kann man über man: termios einstellen. Die werden schon über stdin lesen. Aber vielleicht prüfen die, ob stdin nicht umgelenkt ist. Worin äußert sich das "funktioniert nicht"? Ansonsten musst du mal in den sftp-Code schauen, was die dort genau machen.

    wenn gar nichts hilft, hilft dir vielleicht libssh weiter



  • Also wenn ich stdin von sftp "pipe", dann kann ich via "write_fd = fdopen( this->ParToChild[1], "w" );" und "fprintf(write_fd, "Hallo mein Kind!\n");" Nachrichten an den ChildProcess schicken. Dies Funktionert wunderbar nur eben nicht bei der Passwortanfrage ganz am Anfang. Das mit fprintf geschickte Passwort verschwinded im nirgendwo (d.h. sftp reagiert nicht darauf.)

    mfg Stefan


Anmelden zum Antworten