SSH is one of the best ways to securely access a remote server, typically through a terminal. This is cool and all but what if you aren’t at your workstation? shellngn
is a multi protocol (ssh/rdp/vnc/sftp) client, that comes in two flavors (PRO and Cloud), both of which require a subscription to use. shellngn
is web based, so you can access and login to your servers from anywhere. As an aside I recommend if you’re interested in this product, to try the Pro version first, as it comes with a 30 day trial, and you don’t have to create an account with shellngn
, which you must do if you opt for the Cloud service. I’ll be covering the Pro version here. Note from the table that both platforms essentially do the same thing, the only real difference being that Pro can be self hosted and can access local machines as well as cloud instances.
Cost/Feature Overview
Pro | Cloud |
---|---|
Connect to cloud & local servers | Access cloud servers only |
Self host a docker based image | No installation needed |
Save unlimited servers | Save unlimited servers (with an Advanced plan) |
Unlimited Sessions | Limited Sessions |
I know that not everyone wants to self host so I’ll briefly cover the cloud version: The cloud service is $3.90/mo for the ‘basic’ plan, which limits the number of concurrent sessions you can have to 10, as well as limiting the number of connections you can save to 30; You can save unlimited servers and double your concurrent connections with the “advanced” tier that is $9.90/mo. shellngn
Pro is $39/yr, so the price breakdown is about $3.25 a month—which is a less restrictive and cheaper product than their cloud option. Pro also has a ‘commercial’ tier that supports SSO authentication and supports multiple users/teams as well as server sharing for $199/yr.
Installation (Ubuntu)
Installing Shellngn Pro is very straight forward. It does require that docker be installed so have that ready or if you are running a Ubuntu server, go ahead and copy this into a script or run each command individually. Check Docker’s docs for other installation instructions for other distros.
#For Ubuntu sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] <https://download.docker.com/linux/ubuntu> \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
Once docker is installed pull down the shellngn
image and run it with the following commands:
Note that the Pro edition comes with a 30 day trial and and provides a expiration date reminder in the web panel.
sudo docker pull shellngn/pro sudo docker run --name shellngn-pro \ --mount source=shellngn-data,target=/home/node/server/data \ -p 8080:8080 -e HOST=0.0.0.0 shellngn/pro:latest
If for any reason your instance goes down or you need to restart docker, use these two commands to get it back online.
#lists all containers sudo docker ps -a #start shellngn sudo docker start <e224e30b3ccf> #example docker image name
Using shellngn
NOTE! On first launch, docker will start on the bare IP so just like with any other self hosted software you’ll want to secure the web panel with a subdomain and SSL cert ASAP, See the section at the end for a starter guide on securing the panel.
shellngn
has a very slick modern UI, and it lets you choose between light/dark mode on first login, which gets a big thumbs up from me. You may also change the UI appearance via preferences after the fact along with choosing themes for the terminal and sftp
views.


Creating an identity

Once you’ve set your preferred UI you’ll want to create an identity that will allow you to use the same credentials across multiple servers, which is useful, if you were to say—use the same SSH key/password combo for multiple development servers.


After you’ve added an identity via key file or password login, you’ll want to add a server using the big button on the main menu or by clicking the icon in the top left.

You’ll be greeted by a pop up window that you’ll want to enter the details for the connection that you are trying to make. Shellngn offers support for SSH (v1 & v2), Telnet, VNC, RDP, and SFTP. In the settings tab you’ll find connection modifiers, one setting to take note of here is enabling ‘normal’ copy behavior (CTRL+C), allowing a native copy & pasting into the terminal experience. Otherwise the default is CTRL+SHIFT+C/CTRL+SHIFT+V.


SSH sessions are responsive and work exactly like you would expect them too, it has auto command completion (via Intellisense) with the native TAB key, and a chime feedback sound. Honestly this is a fantastic terminal emulator and you almost won’t notice that you are using a temrinal in a browser.

Other than that blemish, the UI offers a way to organize your connection into folders which is very handy and helps keep the panel uncluttered and neat. shellngn
also provides a SFTP interface that is very fast and has drag and drop functionality that totally doesn’t feel icky to use like other web based SFTP panels (looking at you cPanel) or even dedicated SFTP clients like Filezilla which always makes me cringe anytime I have to use it. Kudos for that one.

Shellngn provides protocols to remotely access your servers’ desktop (provided your server has a desktop environment like GNOME, Xfce4, etc, installed and a VNC/RDP client setup and configured properly). Unfortunately I didn’t have any working VNC clients setup so I was unable to test this feature out.
Securing shellngn with nginx
If considering sticking with shellngn
, I’ve provided a sample nginx
conf file that’s based on the provided specs from shellngn
on their docker page, linked here. This file goes in /etc/nginx/sites-available/
and gets sym-linked to /etc/nginx/sites-enabled
.
#FOR UBUNTU sudo apt install nginx sudo vim /etc/nginx/sites-available/sample-shellngn.conf #or nano #/etc/nginx/sites-available/sample-shellngn.conf server { server_name shellngn.example.com www.shellngn.example.com; access_log /var/log/nginx/shellngn.example.com.access.log; location / { proxy_pass <http://localhost:8080>; #your machine IP and port proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } #then sym link to sites-enabled dir sudo ln -s /etc/nginx/sites-available/sample-shellngn.conf /etc/nginx/sites-enabled/ # check for errors sudo nginx -t # then restart sudo nginx -s reload
Consider this a micro crash course in nginx
for the unfamiliar. From here you can go ahead and generate an SSL certificate using certbot
and you’ll have that sweet, sweet https
encryption.
#install certbot and its dependancies sudo apt install certbot python3-certbot-nginx -y #request a cert. sudo certbot --nginx -d shellngn.example.com -d www.shellngn.example.com
For added security Enable 2FA from the panel and you can have some peace of mind while sending commands out to your machines.

For the price of $39 a year ($3.25/mo), you get a very smooth and stable web based ssh
client that you can access from anywhere. Ignoring the copy\paste thing, it definitely kicks PuTTy’s ass any day of the week. There are other options for web based SSH clients, Apache’s opensource alternative Guacamole comes to mind, but for the price and feature set, shellngn
is not a bad deal for sysadmins with a penchant for web based admin panels.