SFTP to send file with bash script

Bing picture Bing · Jul 31, 2012 · Viewed 55.6k times · Source

I'm using key authentication, so password is not an issue. I have a file whose name I know and I simply want to send it to another machine over sftp.

I tried searching but couldn't find this (seemingly simple) question anywhere. Perhaps my Google-fu is simply failing me today.

In short: I'm on my local machine, want to send a file (test.txt) to a remote machine. Authorized keys are already provided. Basically I want to automate these three steps:

sftp root@remote:/root/dropoff
put test.txt
quit

Is there a simple bash command I can use to automate this? The only option I've seen is using a bash script to perform the put/quit and using the -b option to run it. Is there anything cleaner than that? (I'm not interested in using any other applications/tools.)

Thanks!

Answer

Mike McMahon picture Mike McMahon · Jul 13, 2013

I know this is an old one, but you can also pass arguments to a command with a Here Document

You can put the following into a script:

# The following is called a HERE document
sftp <user>@<remote> << SOMEDELIMITER 
  put test.txt
  ... # any commands you need to execute via sftp
  quit
SOMEDELIMITER

each additional command will be fed into the command preceeding the << and SOMEDELIMTER can be anything you want it to be.

scp is a great option, however sftp was the only tool I was able to get working when pushing from linux to windows and you're stuck using FreeSSHD in service mode!