Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I've been trying to get a PHP script to SFTP upload a file, but failed. I tried asking my question on 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:

>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:'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 does not give me ssh or scp access.

What should I do?

share|improve this question

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.

share|improve this answer
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? – Nerdling 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.

share|improve this answer

Use socat:

For example:

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

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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