Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Single line sftp from terminal

Several times throughout the day, I may be running a test where I need to look through a log file on a remote server. I've gotten used to using my terminal to sftp into the remote server and pull the desired log file down to /tmp on my local machine.

I was looking through the options today using man sftp in an attempt to figure out a way to run the following commands basically in a single line so that I don't have to type a command, press enter, type a command press enter, etc.

(what I do now)

sftp myuser@myserver --mypassword at prompt lcd /tmp get /dir/dir/dir/dir/file quit 

I found while looking through man sftp a reference to scp which I haven't used before. I feel it may be what I'm looking for, but I didn't see a way to specify where I wanted the securely copied file to go.

Could someone provide me with a way to get /dir/file from a remote server and have it download to /tmp/file_plus-my-description?

I was hoping to be able to run an sftp or scp command similar to a regularUNIX copy like:

scp myuser@myserver /dir/file /tmp/file_plus-my-description 

I'm using the built in Terminal in Mac OS X 10.8. Thanks.

like image 662
Kyle Avatar asked May 23 '13 19:05

Kyle


People also ask

How do I list files in SFTP mode?

The SFTP command to list all files is ls , so that you can list all files and directories in the current working directory, as shown below.

How do I Sftp a Unix shell script?

To initiate an SFTP connection, use sftp command with a username and remote host's name or IP. Default TCP port 22 should be open for this to work or else explicitly specify the port using -oPort flag. I'm connecting to an SFTP server with IP 192.168. 1.231 .


1 Answers

Update Sep 2017 - tl;dr

Download a single file from a remote ftp server to your machine:

sftp {user}@{host}:{remoteFileName} {localFileName} 

Upload a single file from your machine to a remote ftp server:

sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}' 

Original answer:

Ok, so I feel a little dumb. But I figured it out. I almost had it at the top with:

sftp user@host remoteFile localFile 

The only documentation shown in the terminal is this:

sftp [user@]host[:file ...] sftp [user@]host[:dir[/]] 

However, I came across this site which shows the following under the synopsis:

sftp [-vC1 ] [-b batchfile ] [-o ssh_option ] [-s subsystem | sftp_server ] [-B buffer_size ] [-F ssh_config ] [-P sftp_server path ] [-R num_requests ] [-S program ] host  sftp [[user@]host[:file [file]]]  sftp [[user@]host[:dir[/]]] 

So the simple answer is you just do : after your user and host then the remote file and local filename. Incredibly simple!

Single line, sftp copy remote file:

sftp username@hostname:remoteFileName localFileName sftp kyle@kylesserver:/tmp/myLogFile.log /tmp/fileNameToUseLocally.log 

Update Feb 2016

In case anyone is looking for the command to do the reverse of this and push a file from your local computer to a remote server in one single line sftp command, user @Thariama below posted the solution to accomplish that. Hat tip to them for the extra code.

sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}' 
like image 93
Kyle Avatar answered Oct 05 '22 23:10

Kyle