Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

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:

http://stackoverflow.com/questions/1767117/how-to-sftp-upload-files-from-php

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?

share|improve this question

3 Answers 3

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: 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

share|improve this answer

Your Answer

 
discard

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.