There are multiple ways to get a file from a remote Linux host. To name a few: scp, sftp, tftp, http/https… And you could probably add more in the list. Depending on your requirements in terms of security, ease of use, availability, and set-up effort you have to decide what is the best option for you.
When it comes to getting a file within a LAN where you don’t have to worry about security, the easiest solution for me is, hands down, setting up a simple HTTP server with Python. Given the fact that Python is prevalent you can do that with the following commands for Python 2:
python -m SimpleHTTPSever
And for Python 3:
python -m http.server
Of course, the tradeoff is that it offers absolutely no security or protection of your content. I would never use this as a public facing server if you are worried about unauthorized users accessing it or if you are looking for a high availability server.
By default this will set up an HTTP server on port 8000 with the current working directory as the root directory. If you need a custom port, e.g. 8080, you just have to add it at the end as follows
python -m SimpleHTTPSever 8080 and
python -m http.server 8080. Keep in mind that if you want to use a port lower than 1024 you’d have to run the command as root, and in most cases this is not necessary. After all, the purpose here is to download a file and then stop the server.
That’s it! Now point your browser to the <IP>:<port> and you will see the directory contents. Here is what it looks like on my browser. I can click on the file I want to download and then I can kill the HTTP server with
On another Linux host, I can transfer the file with wget:
netbeez $ wget 172.31.0.69:8000/logs.txt --2020-04-07 14:47:01-- http://172.31.0.69:8000/logs.txt Connecting to 172.31.0.69:8000... connected. HTTP request sent, awaiting response... 200 OK Length: 6 [text/plain] Saving to: ‘logs.txt’ logs.txt 100%[==============================>] 6 --.-KB/s in 0s 2020-04-07 14:47:01 (197 KB/s) - ‘logs.txt’ saved [6/6]
Or with curl:
curl 172.31.0.69:8000/logs.txt --output logs.txt % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 6 100 6 0 0 25 0 --:--:-- --:--:-- --:--:-- 26
I use this very often when I need a quick and dirty way to transfer a file between two hosts. It’s particularly useful when you want to download a file from a Linux host to a machine that doesn’t have a command line or other utilities such as sftp or scp (e.g. Windows). It’s also very convenient when you want to share ad hoc a file with an unskilled user that can’t use any other software. Just send them the link and they can click and download the file they need.
Subscribe to our blog if enjoy reading posts about Linux, network monitoring, and network engineering.