Skip to main content

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

ProCloud
Connect to cloud & local serversAccess cloud servers only
Self host a docker based imageNo installation needed
Save unlimited serversSave unlimited servers (with an Advanced plan)
Unlimited SessionsLimited 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.

Shellngn first time boot
Shellngn first time boot
Shellngn's theme options
Shellngn’s theme options

Creating an identity

Shellngn home screen

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.

Adding an identity
Where to find the identity settings

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.

Adding a new connection

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.

Connection details
Connection details
Enabling CTRL+C in settings tab
Enabling CTRL+C in settings tab

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.

Shellngn’s terminal

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’s SFTP view

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.

Enabling 2FA

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.

Leave a Reply