Configuration d'un serveur SSH avec paire de clés ed25519

Environnement

L'environnement est fourni à titre indicatif afin d'identifier d'éventuelles divergences de résultats en cas d'utilisation du script dans un environnement proche mais néanmoins différent.

Description

La configuration de la connexion SSH avec paire de clés ed25519 est composée des 3 scripts suivants :

Scripts

01_ssh_config_server_ubuntu_18.04.sh (à lancer sur le serveur en sudo/root)

#! /bin/bash
# 01_ssh_config_server_ubuntu_18.04.sh

echo "###############################################################################"
echo "Sauvegarde du fichier de configuration"
echo "###############################################################################"
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

echo "Saisir le nouveau numéro du port SSH ?"
read port

sed -i "s/#Port 22/Port $port/" /etc/ssh/sshd_config
sed -i 's,#HostKey /etc/ssh/ssh_host_ed25519_key,HostKey /etc/ssh/ssh_host_ed25519_key,' /etc/ssh/sshd_config
sed -i 's/#LogLevel INFO/LogLevel VERBOSE/' /etc/ssh/sshd_config
sed -i 's/#LoginGraceTime 2m/LoginGraceTime 1m/' /etc/ssh/sshd_config
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/#MaxStartups 10:30:100/MaxStartups 10:30:60/' /etc/ssh/sshd_config
sed -i 's/#MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config
sed -i 's/#IgnoreRhosts yes/IgnoreRhosts yes/' /etc/ssh/sshd_config
sed -i 's/#UseDNS no/UseDNS yes/' /etc/ssh/sshd_config
sed -i 's/X11Forwarding yes/X11Forwarding no/' /etc/ssh/sshd_config
sed -i 's,/usr/lib/openssh/sftp-server,/usr/lib/openssh/sftp-server -f AUTHPRIV -l INFO,' /etc/ssh/sshd_config

echo "" >> /etc/ssh/sshd_config
echo "# Ciphers" >> /etc/ssh/sshd_config
echo "KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512" >> /etc/ssh/sshd_config
echo "Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr" >> /etc/ssh/sshd_config
echo "MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com" >> /etc/ssh/sshd_config
echo "" >> /etc/ssh/sshd_config
echo "# Remove OS version" >> /etc/ssh/sshd_config
echo "DebianBanner no" >> /etc/ssh/sshd_config

systemctl restart ssh

echo "###############################################################################"
echo "Configuration du serveur SSH (partie 01) terminée"
echo "###############################################################################"

02_ssh_config_client_ubuntu_18.04.sh (à lancer sur le client avec le compte utilisateur)

#! /bin/bash
# 02_ssh_config_client_ubuntu_18.04.sh

echo "###############################################################################"
echo "Génération des clés publique et privée"
echo "###############################################################################"

echo "Saisir le nom de la machine distante ?"
read server_name

if [ -d ~/.ssh ]; then
    mkdir ~/.ssh
fi

cd ~/.ssh
ssh-keygen -t ed25519 -f $server_name

echo "La paire de clés a été créée sous les noms \"$server_name\" et \"$server_name.pub\" "

echo "###############################################################################"
echo "Envoi de la clé publique sur le serveur distant"
echo "###############################################################################"

echo "Saisir l'adresse IP de la machine distante ?"
read ip_address

echo "Saisir le nom de l'utilisateur sur la machine distante ?"
read user

echo "Saisir le numéro du port SSH de la machine distante  ?"
read port

ssh-copy-id -i ~/.ssh/"$server_name".pub -p "$port" $user@$ip_address

rm -f ~/.ssh/"$server_name".pub
chmod 400 ~/.ssh/*

03_ssh_config_server_ubuntu_18.04.sh (à lancer sur le serveur en sudo/root)

#! /bin/bash
# 03_ssh_config_server_ubuntu_18.04.sh

echo "###############################################################################"
echo "Sauvegarde du fichier de configuration"
echo "###############################################################################"
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bak2

sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/#PermitEmptyPasswords no/PermitEmptyPasswords no/' /etc/ssh/sshd_config
sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config
sed -i 's,#AuthorizedKeysFile,AuthorizedKeysFile,' /etc/ssh/sshd_config

systemctl restart ssh

echo "###############################################################################"
echo "Configuration du serveur SSH (partie 02) terminée"
echo "###############################################################################"