Running your own home server is nice, especially when it`s a Raspberry Pi and the power consumption is very low (hint: your light bulb consumes more). When you run your own server, from time to time you`ll have to access your server remotely. From inside your home network this is not a problem, but how about remote access? SSH is the preferred solution, but you need to have a port open, in and out. So when you are at a location where SSH is not allowed, you won`t be able to connect, and running your SSH server on port 80 or 443 isn`t always a solution:
Your web server might be running there or
The proxy you have to pass through will find it strange to see non HTML requests being made to that port
You might consider a remote desktop solution that allows you to connect to a terminal, but why not making use of a solution that exposes SSH server over HTTP? Say hello to GateOne. To know more what GateOne is check out their web site and GitHub repository
The code is hosted on GitHub, which means that you can use it for your own home use without having to pay for it.
As always, to get it started you must first prepare your system, install and then configure the software.
GateOne is available as several formats, and one is DEB. That`s nice, as my Raspberry Pi is running on Debian. To see the available downloads:
- GateOne downloads: https://github.com/liftoff/GateOne/downloads
A pre-requisite is the tornado framework. So make sure you have python installed. Then download the deb file of tornado from their GitHub site.
- Tornado framework deb: https://github.com/downloads/liftoff/GateOne/python-tornado_2.4-1_all.deb
Download tornado using wget:
Download GateOne debian package, also via wget:
Besides the downloaded packages, you`ll need python and python-support.
sudo apt-get install python
sudo apt-get install python-support
sudo dpkg -i python-tornado_2.4-1_all.deb
sudo dpkg -i gateone_1.1-1_all.deb
The above dpkg command installed GateOne in the folder /opt/gateone. When started, GateOne reads its configuration from a file named server.conf. This file is only created after GateOne was run at least once (or you copy another version into the directory). Next step therefore is to run GateOne and then stop it to be able to alter the default configuration. Run GateOne to let it create the configuration file:
End the program (ctrl-c). As a result, server.conf will be now available.
I`ll run GateOne behind a proxy that will do the SSL stuff, so I can disable ssl
disable_ssl = True
On port 443 my proxy is running, so I must change the port GateOne is going to use.
port = 9080
To make connections to this port, add it to origins
origins = “https://www.itsfullofstars.de:8081;http://localhost;http://127.0.0.1”
This is the basic GateOne configuration. My reverse proxy will handle the TLS part, so I did not have to configure GateOne for this. Of course, best practice is to also make sure GateOne only accepts TLS secured connections. After all, I`ll transmit a password. But the proxy and GateOne run on the same host, and I`ll use GateOne only for external access. I think in this special case I can ignore the additional security.
Access it via HTTP inside a browser.
See the log output given in the console.
GateOne as a service
Of course you do not want to run GateOne manually to be able to use it later. You want to have it run at system startup as a service. The GitHub site of GateOne contains a install readme which covers this too: https://github.com/liftoff/GateOne/blob/master/INSTALL.txt
sudo update-rc.d gateone defaults
Start the service
sudo service gateone start
Check that GateOne is running
ps -ef | grep gateone