My Download Box

What is this?

This is not supposed to be a tutorial and a basic knowledge about Linux is assumed.

If I have this movie I want to watch when I get home, I will have to wait till I am home then download the movie and then watch it. With the kind of internet I have, the download may take around 1-2 hours. I am an impatient person and I can’t wait that long. So I took some bits and pieces that I knew and set up my personal download box which runs as long as internet and electricity is provided to it.
(This is not a dedicated server for a live site, so I don’t have a guaranteed uptime of 99.99% 😀 ).

How did I do it?

I had a Raspberry Pi 2 lying around that I wanted to put to good use. I got a Ethernet cable and connected it to my router and set it up. I was able to SSH into it (a good start). I installed aria2c on it.
To be able to download  a single file or a few files(locally, from my home) this is perfect.

aria2c -x10 "https://www.example.com/movie.mp4"
aria2c -x10 -i list_of_movies.txt

with list_of_movies.txt containing multiple URL each in its own separate line. Cool till now? This ain’t no rocket science. Then I came to the point where I wanted to be able to do this remotely, maybe I’m out with my friends or somewhere and I decide I want to watch this movie X.  I want to get a download link for X and put it on my download box to keep it downloaded for when I reach home. Now these commands become meaningless if I’m not able to SSH into my rPi and run these commands.

So I read up more on a topic I had known about, that is Reverse SSH tunneling. You can get the idea from here – How does reverse SSH tunneling work? I have a droplet running on DigitalOcean. I set up my key based authentication for SSH and set up a reverse SSH Tunnel using

ssh -f -N -T -R686868:localhost:22 username@yourpublichost.example.com

Now the problem was, although this reverse tunnel worked perfectly, it will definitely close down on power loss or maybe connectivity loss. I could put this up in cron or write a script which ran this command periodically. Instead I found something that does a pretty awesome job of maintaining a persistent reverse SSH tunnel.

Meet AutoSSH (The site was down when I checked so here’s another link – Internet Archive: AutoSSH). This is the perfect tool for my job. So I now set up AutoSSH using

autossh -M 10994 -q -N -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3"  -R 6666:localhost:22 username@yourpublichost.example.com -p 2212 &

Now a persistent connection exists always between the rPi and my remote droplet. Now I can SSH anytime and add a download link to aria2c which I run in daemon mode.

aria2c --enable-rpc --rpc-listen-all --rpc-secret mysecret

Then to add a download link, I do

aria2rpc addUri "https://www.example.com/movie.mp4" -x10

For aria2rpc look at – aria2rpc. This is not perfect, maybe an Android app(which might exist) or a web interface would be nice. 🙂

P.S. – A web interface does exist, but I haven’t tinkered with it. WebUI Aria2

Leave a Reply

Your email address will not be published. Required fields are marked *