Issue
I’m trying to run an scp
(secure copy) command using subprocess.Popen
. The login requires that I send a password:
from subprocess import Popen, PIPE
proc = Popen(['scp', "[email protected]:/foo/bar/somefile.txt", "."], stdin = PIPE)
proc.stdin.write(b'mypassword')
proc.stdin.flush()
This immediately returns an error:
[email protected]'s password:
Permission denied, please try again.
I’m certain the password is correct. I easily verify it by manually invoking scp
on the shell. So why doesn’t this work?
Note, there are many similar questions to this, asking about subprocess.Popen
and sending a password for automated SSH or FTP login:
How can I set a users password in linux from a python script?
Use subprocess to send a password
The answer(s) to these questions don’t work and/or don’t apply because I am using Python 3.
Solution
The second answer you linked suggests you use Pexpect(which is usually the right way to go about interacting with command line programs that expect input). There is a fork of it which works for python3 which you can use.
Answered By – entropy
This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0