Learn SSH: Introduction to SSH on Unix-based systems

In this article series, I will explain how to use command line terminal to connect to secure shell (SSH) servers, using the config file for quick access to frequently used servers, and setting up an SSH server on macOS, Ubuntu, or CentOS.

Table of Contents:

– SSH CLI Commands
– SSH Config File
– SSH Server Configuration

So, what is SSH and why we use it? SSH is a Transport layer protocol [source]. And, we use SSH to create secure tunnels between two machines, or a client and a server. For instance, we can run a resource-demanding software on a server to speed up our work or deploy our website on it.

To get started, I recommend installing an Ubuntu server or CentOS minimal using Virtualbox on your computer. Then, open the following file with root privileges using your favorite text editor:


For instance, we can use vi to open the file:

$sudo vi /etc/ssh/sshd_config

This file is the configuration file for the SSH daemon on your virtual machine. Here, we need to make sure the following line is not commented out using ‘#’ and it is set to ‘yes’:

PasswordAuthentication yes

If we make any changes to this file, we need to restart the ssh service using the following command:

$sudo systemctl restart sshd

Now, we need to find our virtual machine’s IP address (host-only adaptor) to connect to it.

Now, we can open up a terminal on our computer (not inside the virtual machine!) and connect to our virtual machine using the username and password we set during server installation:

$ssh username@virtual_machine_IP_address

In my case, the result looks like this:

$ ssh sina@
The authenticity of host ' (' can't be established.
ECDSA key fingerprint is SHA256:MyF58hvhnjfyBHdQEl9fkpiGyGMG+b1W2LPfzpUQYu4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '' (ECDSA) to the list of known hosts.
sina@'s password: 
Last login: Mon Aug 12 00:00:00 2019
[sina@localhost ~]$ 

Now, we are successfully connected to the virtual machine using SSH! We can run any command on the virtual machine using the terminal on our local computer.

Next article in the series: SSH CLI Commands

Asymmetric Static Routing Network using Ubuntu Machines

In asymmetric routing, data packets take different paths to go from source to destination and to come back [source].  To set up an asymmetric network on Linux machines running Ubuntu 16.04, first, we need to configure the systems to act as routers. Let’s consider a network of 3 hosts and 3 routers as Figure 1 shows. The routers are going to be Linux systems bundled with several NICs.

Click on the image to enlarge it.

Figure 1. Network layout.

The routers should be able forward the packets from one network interface card’s (NIC) port to the others. In a terminal window, enter the following command under root privileges (only on routers):

sysctl net.ipv4.ip_forward=1

We also need to ensure that packets coming from a different path that they were sent to, are not dropped as well. Enter the following command (only on routers):

sysctl net.ipv4.conf.all.rp_filter=2

Now, we are ready to assign static routes to the machines. We consider following subnets here:

  • The subnet for Host 1 connection to Router 1:
  • The subnet for Host 2 connection to Router 2:
  • The subnet for Host 3 connection to Router 3:
  • The subnet for Router 1 connection to Router 2:
  • The subnet for Router 1 connection to Router 3:
  • The subnet for Router 2 connection to Router 3:

Figure 2 shows the assigned IP address to each port of Linux machines.

Click on the image to enlarge it.

Figure 2. Assigned IP addresses to each port.

The only remaining step is to set up routing tables on each system. To assign routes to each machine we use the “route” command in terminal.

Hosts use their own assigned IP address for the gateway to their subnets and the IP address of next hop on the same subnet for the gateway to other networks. For example, Host 1 uses the gateway for network and the gateway to connect to network  We run the following commands for these two networks on Host 1:

route add -net netmask gw
route add -net netmask gw

We need to run the same command to add all the 6 subnets to every host and router on the network. Figure 3 shows the requires routing tables for each machine.

Click on the image to enlarge it.

Figure 3. Routing tables for each system. Now we can also add alternate routes to the same network with a higher metric (lower priority) using the “route” command. For example, we could add the following backup route to Router 2:

route add -net netmask gw metric 100

We can test this route by running ping command on a specific interface of  router 2:

ping -I interface_connected_from_Router_2_to_Router_1

Let me know if you had any questions in the comment section.

© 2020 Sina's Blog

Theme by Anders NorénUp ↑