How to run SSH server on multiple ports
Running SSH server on more than one port could be helpful if your SSH server is connected to multiple networks, requiring your SSH server to listen on different ports for the other networks.
SSH is by default configured to listen to port 22 and only on port 22. You can configure your SSH server to run on other ports, and extending the same method allows you to configure your SSH server to run on more than one port.
Related: How to change SSH server port
Steps to run SSH server on more than one ports:
Launch your preferred terminal application.
Check if the ports you plan to assign to your SSH service are not already in use.
$ ss -tlnp | grep -E "22|2022" LISTEN 0 128 *:22 *:* LISTEN 0 128 :::22 :::*
SSH service currently runs on port 22, which is expected.
Open sshd configuration file with your favourite text editor.
$ sudo vi /etc/ssh/sshd_config
Search for Port option and set the value to the ports that you desire.
Port 22 Port 2022
Notice the multiple declaration of the Port directive where SSH will listen to all the listed ports.
Make sure the line does not begin with # as it implies the line is commented and will be ignored.
Configure firewall to allow access to the configured ports (optional, if firewall is enabled).
$ sudo ufw allow 2022/tcp # Ubuntu/Debian $ sudo firewall-cmd --add-port=2022/tcp --permanent && sudo firewall-cmd --reload # CentOS / Red Hat success success
It is assumed the default port, 22 is already configured with correct firewall configuration. Add if necessary.
Configure selinux to allow SSH to run on the configured port (optional, if selinux is used).
$ sudo semanage port -a -t ssh_port_t -p tcp 2022
semanage can be installed on CentOS or Red Hat systems using the following command:
$ sudo yum install --assumeyes policycoreutils-python
It is assumed the default port, 22 is already configured with correct selinux policy. Add if necessary.
Restart sshd service.
$ sudo systemctl restart sshd
Check if sshd is now running on all the configured ports.
$ ss -tlnp | grep 22 LISTEN 0 128 *:2022 *:* LISTEN 0 128 *:22 *:* LISTEN 0 128 :::2022 :::* LISTEN 0 128 :::22 :::*