DEV Community

Cover image for File transfer through SSH is easy!
Mateus Abelli
Mateus Abelli

Posted on • Originally published at mateus.zip on

File transfer through SSH is easy!

For newcomers, SSH itself might look hard at first and file transferring even more complicated. How to connect to a remote machine to send or copy files from it?

I'm going to show you that it is not as complicated as it looks. As a matter of fact, it's quite easy!

First let's define the appearance of our remote connection for our examples:

  • User: dev
  • Address: 123.45.67.89

Replace it with your real remote machine connection while following the examples

The interactive way

Let's use the SSH File Transfer Protocol, or SFTP.

With this tool, we connect to our remote machine and use it with a bash-like shell. Let's see how it works:

sftp dev@123.45.67.89
Enter fullscreen mode Exit fullscreen mode

With SFTP we rely on file browsing to either receive or send files, after opening our connection let's explore the remote and local working directories.

Inside the remote we can navigate freely using cd and ls commands. See all available commands with help.

sftp> pwd
Remote working directory: /home/dev

sftp> lpwd
Local working directory: /c/Users/User
Enter fullscreen mode Exit fullscreen mode

Sending files from πŸ’» local machine to the 🌐 remote machine:

sftp> put # Press Tab
myfile1.txt 
myfile2.txt

sftp> put myfile2.txt # πŸ‘ˆ Send myfile2.txt to the remote working directory
Enter fullscreen mode Exit fullscreen mode

Receiving files or folders from 🌐 remote machine to πŸ’» local machine:

sftp> ls
file1.txt
file2.txt
folder

sftp> get file1.txt # πŸ‘ˆ Gets file1.txt to the local working directory

sftp> get -r folder
        # πŸ‘† To get an entire directory
Enter fullscreen mode Exit fullscreen mode

The non-interactive way

We will be using the Secure Copy Protocol, or SCP.

It's a nice and quick way and all it takes is a ssh-like command with the file paths, a login prompt and there you go!

Sending files from πŸ’» local machine to the 🌐 remote machine:

scp ./file.txt dev@123.45.67.89:/home/dev/file.txt
    # πŸ‘† Your local file path   πŸ‘† Where to place it on the remote
Enter fullscreen mode Exit fullscreen mode

Receiving files or folders from 🌐 remote machine to πŸ’» local machine:

                                      # πŸ‘‡ Where to place it on the local
scp dev@123.45.67.89:/home/dev/file.txt ./file.txt
                  # πŸ‘† The remote file path

scp -r dev@123.45.67.89:/home/dev/folder ./folder
  # πŸ‘† To copy an entire directory
Enter fullscreen mode Exit fullscreen mode

Although this is an easy way for a quick file transfer there are some caveats.

According toΒ OpenSSHΒ developers in April 2019, SCP is outdated, inflexible and not readily fixed; they recommend the use of more modern protocols likeΒ SFTPΒ andΒ rsyncΒ for file transfer.[3]Β As of OpenSSH version 9.0,Β scpΒ client therefore uses SFTP for file transfers by default instead of the legacy SCP/RCP protocol.[4

β€” Wikipedia

Conclusion

As you can see, file transferring through SSH is not that hard. There are a few methods to accomplish it and after you get used to it, it's just like doing a regular connection.

Now you can get that file or send it to your remote box, have fun!

Attributions and Sources

Top comments (15)

Collapse
 
moopet profile image
Ben Sinclair

Yeah, I'll use scp for a quick glob or directory, or if rsync isn't installed, but rsync is much better in most cases.

Collapse
 
mateusabelli profile image
Mateus Abelli

Hello Ben, I havent studied rsync in depth but it looks like a great option to have the files synced between remote and local host. Thanks for the comment :)

Collapse
 
moopet profile image
Ben Sinclair

Neither of them have to be remote or local, by the way. You can scp or rsync on your local drive from one directory to another just as easily. With rsync though, it gives you the super powers to do things like only copy files that have changed, or to delete files that aren't in the source directory!

Thread Thread
 
mateusabelli profile image
Mateus Abelli

That's awesome, I'm definitely going to check out rsync, those features are super useful! thank you :)

Thread Thread
 
koas profile image
Koas

Also, rsync is the base for the almighty rsnapshot, a great tool to make data backups across servers or between your hard drive and an external drive.

Collapse
 
cwprogram profile image
Chris White

Hi Mateus,

I really like how your article was presented. If you're looking for more article ideas, I think something on basic ~/.ssh/config usage would be helpful (and maybe ssh-agent). It would really tie well with the content you have here. Keep up the good work!

Collapse
 
mateusabelli profile image
Mateus Abelli

Hey Chris, thank you, that is awesome! I'll take a look at your suggestions with great appreciation :)

Collapse
 
inovak profile image
Ivan Novak

Great write up Mateus!

I really like the use of emoji pointers to annotate the code and call out specific pieces of the commands.

Collapse
 
mateusabelli profile image
Mateus Abelli

Thank you, I'm still looking at yours to get inspiration but I think that with time I'm going to get better at it. It's awesome that you read it, thanks again πŸ‘

Collapse
 
inovak profile image
Ivan Novak

I appreciate that Mateus! I'm thrilled that you're working at it.

Keep up the great work man!

Collapse
 
shubhamsomu profile image
Shubham Upadhay

yeah.. same in my case i use rsync more often to grab files from staging to local server.. and sftp when sending files to third party's server

Collapse
 
respect17 profile image
Kudzai Murimi

Well-documented!

Collapse
 
mateusabelli profile image
Mateus Abelli

Thank you Kudzai :)

Collapse
 
dengzhuhub profile image
dengzhu-hub

what is this

Collapse
 
mateusabelli profile image
Mateus Abelli

Hello there, those are ways of transfering files through a ssh connection