Telnet Serveur ubuntu - mot de passe de flux
-
13-12-2019 - |
Question
Je suis en train de créer un Serveur Telnet à l'aide de Python sur Ubuntu 12.04.Afin d'être en mesure d'exécuter des commandes en tant qu'utilisateur différent, j'ai besoin d'utiliser la su
commande, puis demande le mot de passe.Maintenant, je sais que le message est envoyé pour le flux STDERR, mais je n'ai aucune idée de qui stream je suis censé envoyer le mot de passe.Si j'essaie de l'envoyer via STDIN, j'obtiens l'erreur: su: must be run from a terminal
.Comment dois-je procéder?
La solution
Si vous voulez vraiment utiliser le système de su
au programme, vous aurez besoin de créer un terminal paire, voir man 7 pty
, en python, c'est pty.openpty
appelez qui vous renvoie une paire de descripteurs de fichiers, un pour vous et un pour la ligue.Ensuite, vous avez à la fourchette, dans le processus de l'enfant changement stdin/out/err esclave fd et exec su.Dans le processus parent vous envoyer et recevoir des données vers de maître fd.Le noyau Linux se connecte ensemble.
Sinon, vous pouvez peut-être imiter su
au lieu de cela?