====== Ubuntu - SSH - Configuring sshd ======
First, make a backup of your sshd_config file by copying it to your home directory, or by making a read-only copy in /etc/ssh by doing:"
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
sudo chmod a-w /etc/ssh/sshd_config.factory-defaults
----
===== Disable logins for the **root** user, only allow login for the core user and disable password based authentication. =====
permissions: 0600
owner: root:root
# Use most defaults for sshd configuration.
UsePrivilegeSeparation sandbox
Subsystem sftp internal-sftp
PermitRootLogin no
AllowUsers core
PasswordAuthentication no
ChallengeResponseAuthentication no
----
===== Changing the sshd port =====
With socket-activated SSH by default. The configuration for this can be found at **/usr/lib/systemd/system/sshd.socket**.
[Socket]
ListenStream=2222
FreeBind=true
Accept=yes
**sshd** will now listen only on port 2222 on all interfaces when the system is built.
Multiple ListenStream lines can be specified, in which case sshd will listen on all the specified sockets:
[Socket]
ListenStream=2222
ListenStream=10.20.30.40:2223
FreeBind=true
**sshd** will now listen to port 2222 on all configured addresses, and port 2223 on 10.20.30.40.
The complete contents of **/etc/systemd/system/sshd.socket** would now be:
[Unit]
Description=OpenSSH Server Socket
Conflicts=sshd.service
[Socket]
ListenStream=2222
ListenStream=10.20.30.40:2223
FreeBind=true
Accept=yes
[Install]
WantedBy=sockets.target
----
===== Activating changes =====
After the edited file is written to disk, you can activate it without rebooting with:
sudo systemctl daemon-reload
We now see that systemd is listening on the new sockets:
systemctl status sshd.socket
Returns
● sshd.socket - OpenSSH Server Socket
Loaded: loaded (/etc/systemd/system/sshd.socket; disabled; vendor preset: disabled)
Active: active (listening) since Wed 2015-10-14 21:04:31 UTC; 2min 45s ago
Listen: [::]:2222 (Stream)
10.20.30.40:2223 (Stream)
Accepted: 1; Connected: 0
...
And if we attempt to connect to port 22 on our public IP, the connection is rejected, but port 2222 works:
ssh core@[public IP]
ssh: connect to host [public IP] port 22: Connection refused
$ ssh -p 2222 core@[public IP]
Enter passphrase for key '/home/user/.ssh/id_rsa':