SSH stands for secure shell #
Introduction sur ce qu’est le shell #
Le shell (ou interface système en français) est un programme qui reçoit des commandes informatiques données par un utilisateur à partir de son clavier pour les envoyer au système d’exploitation qui se chargera de les exécuter.
Le programme le plus couramment utilisé est sous un terminal ou en soit une interface de ligne de commande (CLI pour les intimes)
Comment ça communique tout ça vous vous dites ? Et bien c’est très simple, il faut le voir un peu comme un oignon avec plusieurs couche de la partie Hardware jousqu’à la couche logiciel.
- Commandes / Logiciel:
ls
,pwd
,cp
,libreoffice
… - Shell:
bash
,csh
,ksh
,zsh
- Kernel
- Hardware
Code utilisateur: #
Pour différencier le niveau de privilèges entre les users et le privilège d’administration, une icone est représenté par défaut sur le prompt:
$
pour les users#
- pour le compte root ou élévation de privilègessudo
Configuration SSH #
Le fichier de configuration est le suivant: /etc/ssh/sshd_config
Redémarrer le service SSH:
systemctl restart sshd
Le petit mot de sysops: Attention malheureux ! Lors du redémarrage du service SSH. Si la config' a été changer, tu ne perdras pas la main sur la session courante si tu es connecté: la session TCP est maintenu; heureusement. Vérifie que les modifications que tu as appliquer fonctionne bien en ré-ouvrant une nouvelle session en parallèle afin de contrôler que toute l’authentification et l’accès réseau au shell se passe bien.
Sécurité à surveiller dans la configuration; #
Liste de paramètres à être attentif dans le fichier de configuration: /etc/ssh/sshd_config
#Le port par défaut est à définir
Port 22
#Desactiver la connexion SSH en tant que root
PermitRootLogin no
#Politique de mot de passe vide à rejeter
PermitEmptyPasswords no
#Délai de connexion
ClientAliveInterval 600
ClientAliveCountMax 0
#Limit access to specific users
AllowUsers anakin, r2d2
Accès par échange de clés #
Il existe des cas de figure sur lequel la saisie du user / mot de passe peut poser problème ou être une contrainte:
- Accès utilisateur répété
- Automatisation de tâches (scripts, applications ect…)
Ainsi pour bypass la saisie de credentials mais conserver une sécurité optimale de SSH, il est possible de dérouler un échange de clé entre le client et le serveur. Cela se fait en 3 étapes très simple:
ssh-keygen
ssh-copy-id [email protected]
#Saisie du mot de passe
ssh [email protected]
#Hop ! Vous êtes connecter directement
Erreur ssh-copy-id command not found, Ca peut-être possible si la configuration du serveur est vraiment au minimal, mais j’ai un Plan B:
#!/bin/bash
if [[ "$1" == "root" ]]; then
HOME_DIR="/root"
else
HOME_DIR="/home/$1"
fi
if [ "$#" -ne 2 ]; then
echo "Commande valide $0 <User> <IP>"
else
cat ~/.ssh/id_rsa.pub | ssh -i ~/.ssh/generique $1@$2 "mkdir -p $HOME_DIR/.ssh && cat >> $HOME_DIR/.ssh/authorized_keys"
fi
Raccourci SSH de connexion #
Il est possible de définir des raccourcis par des aliases sur les hôtes saisies:
Celà ce passe dans la configuration globale: /etc/ssh/ssh_config
ou spécifique à un utilisateur dans: ~/.ssh/config
:
Host darkstar
HostName 172.16.1.10
User dark_vador
Port 9722
IdentityFile ~/.ssh/dark_vador.key
Host *
User root
Compression yes
Ainsi par exemple à la place de renseigner ssh [email protected] -p 9722 -i ~/.ssh/dark_vador.key
il suffira juste de renseigner ssh darkstar
.
C’est quand même bien plus rapide ;-)