Ajout de la documentation concernant la fonctionnalité sshpass

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)
This commit is contained in:
Siphonight 2024-12-05 22:15:33 +01:00
parent 63de8d0f33
commit a2e439b1b5
3 changed files with 18 additions and 9 deletions

View File

@ -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

View File

@ -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

View File

@ -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."