2010-11-10 48 views
1

J'essaie les suivantesPython: Exécuter scp, stdin pour le mot de passe ne fonctionne pas

from subprocess import Popen, PIPE 
Popen(["scp", "-B","[email protected]:file", "."], stdin=PIPE, shell=False).communicate(input="password") 

mais je reçois toujours le mot de passe PROMT, et aucun mot de passe est envoyé. Je sais que je peux utiliser scp avec les touches, mais ce n'est pas ce dont j'ai besoin.

Une aide?

+1

Cette question pourrait vous intéresser: http://stackoverflow.com/questions/250283/how-to-scp-in-python –

+0

Les réponses à cette question peuvent vous aider: [link] (http://stackoverflow.com/questions/2387731/use-subprocess-to-send-a-password) – AndreiM

Répondre

3

scp interagit avec le terminal directement, plutôt que de lire de STDIN, Vous ne pouvez pas passer le mot de passe par un tuyau, il importe de sécurité pour scp et il est le même pour sftp, ssh.

vous pouvez l'essayer en vous de terminal comme celui-ci (et il ne fonctionne pas):

echo "password" | scp [email protected]:test . 
+0

Cela ne fonctionne pas. Il demande toujours un mot de passe – zengr

1

Comme d'autres l'ont dit, scp (et ssh) lire le mot de passe directement depuis la console au lieu de stdin, donc l'utilisation de sous-processus pour envoyer le mot de passe ne fonctionnera pas. Vous pouvez utiliser pexpect à la place - voir les docs et de nombreux exemples pour savoir comment faire.