Skip to content

Créer à l’aide d’un script bash, un environnement de déploiement pour Ansible

Dans cet article, nous allons voir comment créer à l’aide d’un script bash, un environnement de déploiement pour Ansible. Ce dernier permettra : De créer un utilisateur spécialement pour vos déploiements D’ouvrir et fermer le port ssh (22) à la demande Cela sera particulièrement intéressant si vous avez suivi les recommandations de mon précédent article “Comment sécuriser son serveur dans lequel j’énumère quelques bonnes pratiques de sécurité à mettre place. 😜

Première étape : création d’un deuxième service SSH

Nous partirons du fait que votre port SSH a été changé et n’est pas en écoute sur le port 22. Ce deuxième service tournera sur le port 22. Il va permettre d’activer et de désactiver ce dernier plus facilement. Son usage est surtout destiné pour les communications externes à un moment T (typiquement Ansible, scp pour ne citer qu’eux)

Allez, c’est parti pour la mise en place !! 😄

Premièrement, on va copier le fichier de configuration SSH :

cp /etc/ssh/sshd_config /etc/ssh/sshd_config_ext 

On copie également le fichier de configuration systemd relatif au service SSH :

cp /etc/systemd/system/sshd.service /etc/systemd/system/sshd-ext.service

Dans le fichier /etc/systemd/system/sshd-ext.service il va falloir changer la ligne ExecStart=/usr/sbin/sshd -D $SSH_OPTS par :

ExecStart=/usr/sbin/sshd -D $SSH_OPTS -f /etc/ssh/sshd_config_ext

Dans le même fichier, modifier la ligne Alias=sshd.service par :

Alias=sshd-ext.service 

A présent, dans le fichier /etc/ssh/sshd_config_ext modifiez le port d’écoute SSH par :

Port 22

Afin de prendre en compte nos modifications, faites la commande suivante :

systemctl daemon-reload 

Maintenant, lorsque vous aurez besoin de communiquer par le port 22, vous pouvez activer ce service comme suit :

systemctl start sshd-ext 

Et pour couper le service :

systemctl stop sshd-ext 

Deuxième étape : Création d’un utilisateur dédié aux déploiements Ansible

Pour la création de l’utilisateur, je souhaitais qu’il soit présent dans le système, uniquement lorsque j’en ai besoin. C’est pourquoi je suis passé par un script bash. Je vais vous présenter en détail ce dernier.

On commence par définir deux variables, une pour le nom de l’utilisateur et une autre pour son mot de passe :

username="ansible" 
password="MyS3cret" 

Pour faire en sorte d’activer et désactiver l’utilisateur, je passe par une condition :

if [[ $1 == "start" ]] then 
  useradd -m $username --shell /bin/bash echo -e "$password\n$password" | passwd $username usermod -aG sudo $username 
  systemctl start sshd-ext 
  iptables -A INPUT -p tcp --dport 22 -j ACCEPT 

Lorsque l’on passe “start” en argument lors de l’exécution du script, l’utilisateur sera créé. J’en profite aussi pour l’ajouter au groupe sudo (en vu d’une utilisation Ansible). Je démarre mon service SSH externe. Puis je mets en place une règle iptables pour autoriser ce dernier. Une fois notre tâche terminée, nous pouvons faire les actions inverses et revenir à l’état initial. Nous passons l’argument “stop“. Cela aura pour effet de supprimer l’utilisateur, stopper le service SSH externe puis de bloquer le port 22 au niveau des iptables.

elif [[ $1 == "stop" ]] then 
  userdel --remove -f $username 
  systemctl stop sshd-ext 
  iptables -A INPUT -p tcp --dport 22 -j DROP 

Voici l’ensemble du script :

#!/bin/bash 

# Variables servant à definir un nom d'utilisateur et son mot de passe 
username="ansible" 
password="MyS3cret" 

# Condition si start est passé en argument (creation user, add sudo group, start ssh, setup iptables) 

if [[ $1 == "start" ]] then 
  useradd -m $username --shell /bin/bash echo -e "$password\n$password" | passwd $username usermod -aG sudo     $username 
  systemctl start sshd-ext iptables -A INPUT -p tcp --dport 22 -j ACCEPT 

# Condition si stop est passé en argument 
elif [[ $1 == "stop" ]] then 
  userdel --remove -f $username 
  systemctl stop sshd-ext 
  iptables -A INPUT -p tcp --dport 22 -j ACCEPT 

else 
  echo -e "*********\nVeuillez indiquer en argument : start|stop\n*********" 
fi 

Afin d’être plus flexible, il est tout à fait possible de placer ce script dans le répertoire /usr/bin de votre machine. De cette manière, vous pourrez l’exécuter depuis n’importe quel répertoire en procédant ainsi : mon_script start mon_script stop N’oubliez pas de rendre exécutable le script avec un petit chmod :

chmod +x mon_script 

Conclusion

Nous avons vu comment mettre en place un deuxième service SSH n’écoutant pas sur le même port que le premier. Ensuite, nous avons vu comment créer un utilisateur et des règles réseau via un script bash. Ce dernier permettant d’automatiser les étapes de création et de suppression. A présent il vous sera possible d’activer le service SSH et/ou la présence d’un utilisateur uniquement lorsque vous en avez le besoin. 😄

J’espère que cet article vous a plu. Si vous avez des remarques ou des axes d’améliorations n’hésitez pas à m’en faire part !

Published inNon classé

Comments are closed.