I've been trying to get a PHP script to SFTP upload a file, but failed. I tried asking my question on stackoverflow.com but haven't received a working solution:


So now I want to try a different approach. Is there a way to write a shell script that can issue several commands to sftp upload a file to another server? If I were to issue commands one by one from terminal, it would look like:

>sftp user@server.com
>password: mypassword
>put file.csv

I tried putting these three lines into a ./automaticupload file. When I executed the file, but the terminal shows me:

user@server.com's password:

even though I typed in the password line in automaticupload.

I am unable to create a passwordless ssh/scp/sftp account. The remote server.com does not give me ssh or scp access.

What should I do?


If you want to use sftp from a script you need to setup passwordless SSH keys with ssh-keygen(1) or use sshpass

My vote would nearly always be for the former, but it can depend on the situation which is more appropiate.

  • I don't have privileges to set up either of those options. The remote server belongs to a company that deals with financial transactions, so they're limiting my access to only sftp uploads. – John Nov 19 '09 at 23:54
  • and forcing me to supply username and password each time – John Nov 19 '09 at 23:55
  • so you've tried uploading your public key in the appropriate place with the correct permissions and it ignored them? – Jeremy L Nov 20 '09 at 1:37
  • yeah, it says permission denied when i try to enter the .ssh directory – John Nov 25 '09 at 6:14

Install and use expect, it's designed for exactly this kind of situation.

Use the autoexpect script to generate an expect script from a recorded live session. Depending on the distribution, autoexpect is either included in the main expect package, or (strangely) in expect-dev on Ubuntu.

  • does expect stores the password encrypted? – bgtvfr Apr 20 '17 at 11:20

Use socat: http://www.dest-unreach.org/socat/

For example:

(sleep 2; echo password) | socat - EXEC: "sftp -o batchmode=no -o PubkeyAuthentication=no -b batchfile user@host",pty,setsid,ctty

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.