SSH Hardening
How to harden your SSH server
-
On the client
ssh-keygen -t ed25519 -a 420 -f ~/.ssh/demo.ed25519 -C "mykey for demo"
cat ~/.ssh/demo.ed25519.pub
Copy and then upload public key to the server
Create a config file on the client
vi ~/.ssh/config
Host shortname for server
Hostname fqdn.example.com
User login user
Port port to use
PreferredAuthentications publickey
IdentityFile~/.ssh/demo.ed25519
On the server
mkdir ~/.ssh; touch ~/.ssh/authorized_keys; chmod 700 ~/.ssh
vi ~/.ssh/authorized_keys
paste here the client key
chmod 400 ~/.ssh/authorized_keys
SSH configuration
vi /etc/ssh/sshd_conf
Port 22
ListenAddress 0.0.0.0
ListenAddress ::
Protocol 2
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
# Specifies the ciphers allowed
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
#Ciphers aes256-ctr,aes192-ctr,aes128-ctr
#Specifies the available MAC (message authentication code) algorithms
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com
SyslogFacility AUTH
LogLevel VERBOSE
# Log sftp level file access (read/write/etc.) that would not be easily logged otherwise.
Subsystem sftp /usr/lib/ssh/sftp-server -f AUTHPRIV -l INFO
LoginGraceTime 2m
PermitRootLogin no
PasswordAuthentication no
StrictModes yes
PubkeyAuthentication yes
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM no
AllowTcpForwarding yes
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
Compression yes
ClientAliveInterval 15
ClientAliveCountMax 3
UseDNS no
chown root:root /etc/ssh/sshd_config
chmod 600 /etc/ssh/sshd_config
Remove the passphrase for existing the SSH key
ssh-keygen -p -f name-of-private-key
Change the comment field of an existing SSH key
ssh-keygen -f ~/.ssh/mykey -c -C 'a new comment' -o
SSH Tunneling
ssh-keygen -L