Comment interagir avec ssh à l'aide de sous-processus module
Je suis en train de frayer un ssh processus enfant à l'aide de sous-processus.
Je suis en train de travailler sur le langage Python 2.7.6 sur Windows 7
voici mon code:
from subprocess import *
r=Popen("ssh sshserver@localhost", stdout=PIPE)
stdout, stderr=r.communicate()
print(stdout)
print(stderr)
Sorties:
None
stdout doit contenir:
sshserver@localhost mot de passe:
Sur Linux au moins (et problème de windows) le
Si vous allez avoir besoin pour automatiser
J'ai déjà travaillé sur pexpect mais cela ne fonctionne pas parfaitement sur windows c'est pourquoi je veux utiliser les modules standards de python @larsks
Vous ne pouvez pas utiliser les modules standard pour cela. Windows ne vous permet pas de s'accrocher jusqu'à la sous-processus d'identification. J'ai lu au sujet de quelqu'un se tripoter la
J'avais déjà installé debian et a travaillé avec pexpect, mais je veux trouver une solution pour windows 😀
stdin
de votre ats n'est pas le même que celui ssh demande le mot de passe. Tenir sur, a obtenu le code pour cette (linux tho).Si vous allez avoir besoin pour automatiser
ssh
vous voulez probablement pour enquêter sur quelque chose comme pexpect ou similaire. Vous pouvez également envisager de simplement en utilisant la clé d'authentification basée sur de sorte que vous n'avez pas besoin de bricolons avec des mots de passe.J'ai déjà travaillé sur pexpect mais cela ne fonctionne pas parfaitement sur windows c'est pourquoi je veux utiliser les modules standards de python @larsks
Vous ne pouvez pas utiliser les modules standard pour cela. Windows ne vous permet pas de s'accrocher jusqu'à la sous-processus d'identification. J'ai lu au sujet de quelqu'un se tripoter la
win32
bibliothèque tho qui a réussi à changer les processus d'autorisations pour la boucle principale afin de la joindre à l'ID de sous-processus et de lire la sortie standard (stdout). Mais en bref, il n'est pas possible. J'ai posté toutes vos 3 options ci-dessous qui est connu pour fonctionner. Le premier est un Linux solution de sorte que vous n'êtes probablement pas intéressé, sauf si vous voulez prendre de l'emprise sur la vie et l'utilisation d'un bon OS, heh 🙂J'avais déjà installé debian et a travaillé avec pexpect, mais je veux trouver une solution pour windows 😀
OriginalL'auteur WannaBeGenius | 2014-01-29
Vous devez vous connecter pour publier un commentaire.
Voici un exemple d'utilisation de SSH code qui gère l'promt pour oui/non sur le certificat de la partie et aussi lorsque vous êtes invité pour un mot de passe.
La raison (et corrigez-moi si je me trompe) pour vous de ne pas être capable de lire la
stdin
tout de suite c'est parce que SSH fonctionne comme un sous-processus sous un autre ID de processus dont vous avez besoin pour lire/mettre en place.Depuis que vous utilisez windows,
pty
ne fonctionnera pas. il y a deux solutions qui fonctionnent le mieux et c'est pexpect et comme quelqu'un l'a souligné en fonction de clé d'authentification.Afin d'obtenir une clé d'authentification, vous devez uniquement effectuer les opérations suivantes:
Sur votre client, exécutez:
ssh-keygen
Copie de votre
id_rsa.pub
contenu (une ligne) dans/home/user/.ssh/authorized_keys
sur le serveur.Et vous avez terminé.
Si non, aller avec pexpect.
Qui je l'ai mentionné dans ma réponse n'avais-je pas? :/
oui vous l'avez fait, et je n'ai mentionné que je suis en train de travailler sur windows 😉
Et c'est pourquoi j'ai posté deux autres solutions qui fonctionnent dans Windows 😉 Remarque: Linux correctif est pour quelqu'un d'autre la lecture de ce (parce qu'il y aura une TONNE d'autres personnes de venir ici parce que c'est un problème commun), vous avez également une machine linux maintenant si cela peut vous aider 😛
Les Solutions de votre réponse ne fonctionnent pas sur Windows.
pexpect
besoinspty
qui s'attend à un système POSIX (pty
est écrit pour Linux).OriginalL'auteur Torxed