Simplecode
Simplecode

Reputation: 589

Send password to sftp subprocess in Python

import subprocess

password= "xyz"

p = subprocess.Popen(["sudo", "-S", "whoami"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)

print (p.communicate((password+"\n").encode())) 


ps = subprocess.Popen(["sftp", "user@sftphost"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)

print (ps.communicate((password+"\n").encode())) # without print as well I get prompted for password

First command (sudo -S whoami) is successful through subprocess taking the password correctly. However, the password is not accepted for sftp command – I am still getting prompted to enter password.

I have the same question as Use subprocess to send a password. However, I do not want to use the solution like Pexpect or expect. I have tried rest of the solutions.

Want to know why this fails for sftp and is there any other way?

Upvotes: 2

Views: 2761

Answers (2)

Martin Prikryl
Martin Prikryl

Reputation: 202222

OpenSSH sftp always reads the password from the terminal (it does not have an equivalent of sudo -S switch).

There does not seem to be a readily available way to emulate a terminal with subprocess.Popen, see: How to call an ncurses based application using subprocess module in PyCharm IDE?


You can use all the hacks that are commonly used to automate password authentication with OpenSSH sftp, like sshpass or Expect:
How to run the sftp command with a password from Bash script?

Or use a public key authentication.


Though even better is to use a native Python SFTP module like Paramiko or pysftp.

With them, you won't have these kinds of problems.

Upvotes: 0

olisch
olisch

Reputation: 990

sftp does not read the password from stdin, but it opens /dev/tty instead. That's the reason why sending the passwod via communicate won't work.

Instead you can use pubkey authentication and use a batchfile (sftp -b) for your sftp commands. As an alternative you can also interact with sftp using pexpect (https://pexpect.readthedocs.io/en/stable/).

Upvotes: 2

Related Questions