From a2e439b1b585a07cc90a95bda3cfdf80da7ebdc7 Mon Sep 17 00:00:00 2001 From: Siphonight Date: Thu, 5 Dec 2024 22:15:33 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20de=20la=20documentation=20concernant=20?= =?UTF-8?q?la=20fonctionnalit=C3=A9=20sshpass?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ajout de la documentation relative à sshpass. Modification de la version dans le Dockerfile pour correspondre à la version en cours. Patch du problème de clés d'hôtes nouvelles bloquant les connexion au travers de sshpass. (Solution temporaire ne présentant pas de risques dans le cas d'utilisation présent. Une meilleure solution sera mise en place lors d'un patch à venir) --- Dockerfile | 3 +-- README.md | 18 ++++++++++++++---- server_menu.sh | 6 +++--- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index fdfbceb..37ecaa5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,10 @@ FROM alpine:3.20.0 AS monosphere-builder #~The open Monosphere Project~ -#Version : 0.5.8 #Autor : Siphonight :) #Setting default settings, please change them at run -ARG MONOSPHERE_VERSION="0.5.8 Alpha" +ARG MONOSPHERE_VERSION="1.0.1 Alpha" #Defining build settings diff --git a/README.md b/README.md index 9ce4677..bc6d3ed 100644 --- a/README.md +++ b/README.md @@ -250,14 +250,16 @@ ssh -J utilisateur@ip_bastion utilisateur@ip_distante Pour définir les utilisateurs autorisés et les serveurs auxquels ils peuvent se connecter, modifiez le fichier **authorized_servers.txt** dans le répertoire **/opt/public/servers/**. Chaque ligne doit contenir l'adresse IP du serveur, le port, le nom personnalisé du server, le nom d'utilisateur de connexion et le nom d'utilisateur, séparés par des espaces : ```txt -192.168.1.10 22 server1 server_user1 user1,user2 privkey1 -192.168.1.11 2222 server2 server_user2 user2 +192.168.1.10 22 server1 server_user1 user1,user2 key privkey1 +192.168.1.11 23 server2 server_user2 user1 password pass_server2 +192.168.1.12 2222 server3 server_user3 user2 ``` -L'indication de la clé privée pour la connexion au hôtes distants n'est pas obligatoire mais fortement recommandée. Si vous n'en avez pas besoin vous pouvez ne pas indiquer le nom de la clé privée. +L'indication de la méthode d'authentification (password/key) n'est pas obligatoire mais fortement recommandée. +Par défaut, si aucune option d'authentification n'est configurée, le mot de passe de l'hôte distant sera demandé à l'utilisateur. Explication de la construction des lignes du fichier: ```txt -[Adresse_IP] [Port] [Nom_du_serveur/Hostname] [Nom_de_utilisateur_de_connexion] [Usilisateurs_autorisés] [Nom_de_clé_privée_a_utiliser] +[Adresse_IP] [Port] [Nom_du_serveur/Hostname] [Nom_de_utilisateur_de_connexion] [Usilisateurs_autorisés] [Type_authentification] [Fichier_a_utiliser] ``` Comme montré ci-dessus, il est possible de mettre plusieurs noms d'utilisateurs sur un seul et même serveur, dans le cas où plusieurs utilisateurs sont autorisés à se connecter sur la machine distante et sur le même utilisateur distant. @@ -267,6 +269,14 @@ Si vous souhaitez vous connecter sur la même machine distante mais avec un util A savoir qu'il est également possible d'utiliser des noms de domaine DNS, mais prenez en compte le fait que la résolution de nom se fera au niveau du bastion et non du client. +Enfin, concernant la méthode d'authentification, deux options sont possibles : + - key : Précise au bastion que l'authentification sur l'hôte distant devra se faire au moyen d'une clé privée SSH précisée dans le fichier indiqué dans l'argument suivant. + - password : Précise au bastion que l'authentification sur l'hôte distant devra se faire au moyen d'un mot de passe inscrit dans le fichier indiqué dans l'argument suivant. + +L'argument "Fichier_a_utiliser" indique de ce fait le nom du fichier situé dans le répertoire **/opt/public/servers/** (même répertoire que le script du menu d'authentification) contenant le secret à utiliser pour l'authentification dépendant de la méthode choisie. + +A noter que si la méthode par mot de passe est sélectionnée, Le fichier indiqué devra contenir uniquement le mot de passe, en première ligne du fichier, sans aucune autre ligne complémentaire. + #### Ajout d'utilisateurs Les utilisateurs configurés sur le bastion peuvent être séparés en 2 types : - Les utilisateurs clients du bastion diff --git a/server_menu.sh b/server_menu.sh index 3bb517b..a96f88c 100644 --- a/server_menu.sh +++ b/server_menu.sh @@ -41,17 +41,17 @@ function main_menu () { selected_server="${server_map[$choice]}" echo "Connexion à $( echo "$selected_server" | cut -d " " -f -3)..." if [ -z "$(echo "$selected_server" | cut -d ' ' -f 4)" ] && [ -f "$AUTHORIZED_SERVERS_PATH"/"$(echo "$selected_server" | cut -d ' ' -f 5)" ]; then - ttyrec -z --"$(echo "$selected_server" | cut -d ' ' -f 1)"-"$(echo "$selected_server" | cut -d ' ' -f 3)"-- -k 300 --warn-before-kill 60 -- ssh -p "$(echo "$selected_server" | cut -d ' ' -f 2)" "$(echo "$selected_server" | cut -d ' ' -f 3)"@"$(echo "$selected_server" | cut -d ' ' -f 1)" + ttyrec -z --"$(echo "$selected_server" | cut -d ' ' -f 1)"-"$(echo "$selected_server" | cut -d ' ' -f 3)"-- -k 300 --warn-before-kill 60 -- ssh -o StrictHostKeyChecking=accept-new -p "$(echo "$selected_server" | cut -d ' ' -f 2)" "$(echo "$selected_server" | cut -d ' ' -f 3)"@"$(echo "$selected_server" | cut -d ' ' -f 1)" elif [ "$(echo "$selected_server" | cut -d ' ' -f 4)" == "key" ]; then eval "$(ssh-agent)" > /dev/null trap 'kill $SSH_AGENT_PID' EXIT cat /"$AUTHORIZED_SERVERS_PATH"/"$(echo "$selected_server" | cut -d ' ' -f 5)" | ssh-add - > /dev/null - ttyrec -z --"$(echo "$selected_server" | cut -d ' ' -f 1)"-"$(echo "$selected_server" | cut -d ' ' -f 3)"-- -k 300 --warn-before-kill 60 -- ssh -p "$(echo "$selected_server" | cut -d ' ' -f 2)" "$(echo "$selected_server" | cut -d ' ' -f 3)"@"$(echo "$selected_server" | cut -d ' ' -f 1)" + ttyrec -z --"$(echo "$selected_server" | cut -d ' ' -f 1)"-"$(echo "$selected_server" | cut -d ' ' -f 3)"-- -k 300 --warn-before-kill 60 -- ssh -o StrictHostKeyChecking=accept-new -p "$(echo "$selected_server" | cut -d ' ' -f 2)" "$(echo "$selected_server" | cut -d ' ' -f 3)"@"$(echo "$selected_server" | cut -d ' ' -f 1)" ssh-add -D > /dev/null elif [ "$(echo "$selected_server" | cut -d ' ' -f 4)" == "password" ] && [ -f /"$AUTHORIZED_SERVERS_PATH"/"$(echo "$selected_server" | cut -d ' ' -f 5)" ]; then local ssh_password ssh_password=$(cat /"$AUTHORIZED_SERVERS_PATH"/"$(echo "$selected_server" | cut -d ' ' -f 5)") - ttyrec -z --"$(echo "$selected_server" | cut -d ' ' -f 1)"-"$(echo "$selected_server" | cut -d ' ' -f 3)"-- -k 300 --warn-before-kill 60 -- sshpass -p "$ssh_password" ssh -p "$(echo "$selected_server" | cut -d ' ' -f 2)" "$(echo "$selected_server" | cut -d ' ' -f 3)"@"$(echo "$selected_server" | cut -d ' ' -f 1)" + ttyrec -z --"$(echo "$selected_server" | cut -d ' ' -f 1)"-"$(echo "$selected_server" | cut -d ' ' -f 3)"-- -k 300 --warn-before-kill 60 -- sshpass -p "$ssh_password" ssh -o StrictHostKeyChecking=accept-new -p "$(echo "$selected_server" | cut -d ' ' -f 2)" "$(echo "$selected_server" | cut -d ' ' -f 3)"@"$(echo "$selected_server" | cut -d ' ' -f 1)" unset ssh_password else echo -e "Un problème de configuration a été détecté sur \nles options de connexion à l'hôte selectionné.\nVeuillez contacter votre administrateur."