Tunneling over an intermediate to overcome demilitarized zone
Source code: shell script
Tunneling over a intermediar is often used to connect to a server which is e.g. in a DMZ. In the following case we have a server that is the company network and does only allow connections on port 22 from the DMZ. Means the server cannot be connection over the internet. In addition, we have a server in the DMZ which allows connection on port 22 from outside (internet) and can connect to the company network over port 22. Last but not least, every time a server restarts we want that the tunnels automatically opens, means that we need to have an cron job that checks, whether an open connection exists from the server to the intermediary or not, and if the server opens a connection to the intermediary the system does not need to prompt for password. Solution is here to register the public key of the server on the intermediary.
Client
Opening a tunnel from client to intermediary
ssh -L 22000:127.0.0.1:22000 -N root@152.96.56.32Connecting to server
ssh -P 22000 michel@127.0.0.1Copy files (SCP)
#get
scp -P 22000 michel@127.0.0.1:/home/michel/tunelling.sh /Users/michel/Public/Drop\ Box/
#put
scp /Users/michel/Public/Drop\ Box/tunelling.sh -P 22000 michel@127.0.0.1:/home/michel/Intermediary
Register GPG key from server
apt-key add <file>Server
Export GPG key
apt-key export <key> > <file>Open a connection to intermediary from server
Save the following script as e.g. tunneling.sh
#!/bin/sh
cmd="ssh -R 22000:127.0.0.1:22 -N root@152.96.56.32"
match=$(ps -aef | grep "${cmd}" | grep -v grep)
if [ -z "${match}" ] ; then
$cmd &
fiRegister cron job
Edit crontab
crontab -eAdding a new job to the crontab. The following entry executes the defined script tunneling.sh every 5 minutes.
5 * * * * /<path>/tunnelilng.shCrontab is structured as follow:
* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)