1

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:

https://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?

John
  • 7,153
  • 22
  • 61
  • 86

3 Answers3

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.

Philip Reynolds
  • 9,751
  • 1
  • 32
  • 33
  • 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 01:37
  • yeah, it says permission denied when i try to enter the .ssh directory – John Nov 25 '09 at 06:14
1

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

Dan
  • 15,280
  • 1
  • 35
  • 67
user141292
  • 11
  • 1
1

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.

Florin Andrei
  • 1,148
  • 1
  • 11
  • 18