diff --git a/README.md b/README.md index 4dbd4aa..9c20fa0 100644 --- a/README.md +++ b/README.md @@ -47,9 +47,8 @@ Voici une liste des différentes fonctionnalités déjà en place sur le bastion ## Objectifs des mises à jour Ci-dessous une liste non exhaustive des objectifs des prochaines mises à jour du projet: - [ ] Ajouter le support pour un serveur LDAP. (Objectif sur le long terme) - - [ ] Ajouter un système de mise à jour automatique dans le conteneur, évitant ainsi les redéploiements. -- [ ] Ajouter la possibilité de revenir dans le menu des serveurs après une déconnexion d'une machine distante. +- [x] Ajouter la possibilité de revenir dans le menu des serveurs après une déconnexion d'une machine distante. - [ ] Améliorer le système de journalisation du déploiement du bastion, avec les erreurs de déploiement affichées lors de la connexion des utilisateurs internes. - [ ] Ajouter un menu d'administration et de gestion lors de la connexion des utilisateurs internes du bastion. - [ ] Créer des rôles administrateur/inspecteur avec des droits différents au sein du bastion. @@ -58,6 +57,10 @@ Ci-dessous une liste non exhaustive des objectifs des prochaines mises à jour d - [x] Ajouter le support pour différents utilisateurs distants. - [x] Intégration de ttyrec pour la sauvegarde des sessions effectuées sur le bastion. +Correction en cours pour les bugs ci dessous : +- Ajout de vérification de la présence des configurations afin de ne pas répéter les paramètres dans les fichiers à chaque redémarrage du conteneur. +- Correction d'un bug autorisant systématiquement des utilisateurs du bastion à se connecter sur les serveurs distants si le compte d'accès à ce dernier porte le même nom que l'utilisateur du bastion. + ## Installation Pour installer Monosphere Bastion, clonez ce dépôt et construisez l'image Docker en utilisant le fichier Dockerfile fourni. diff --git a/server_menu.sh b/server_menu.sh index 0013480..0350220 100644 --- a/server_menu.sh +++ b/server_menu.sh @@ -10,36 +10,45 @@ if [ -z "$USER_SERVERS" ]; then exit 1 fi -echo "Veuillez sélectionner un serveur auquel vous connecter :" +function main_menu () { + echo "Veuillez sélectionner un serveur auquel vous connecter :" -counter=1 -declare -A server_map -while read -r line; do - ip=$(echo "$line" | cut -d ' ' -f 1) - port=$(echo "$line" | cut -d ' ' -f 2) - custom_name=$(echo "$line" | cut -d ' ' -f 3) - server_user=$(echo "$line" | cut -d ' ' -f 4) - server_authkey=$(echo "$line" | cut -d ' ' -f 6) - server_map[$counter]="$ip $port $server_user $server_authkey" - echo "$counter) $custom_name - $server_user $ip:$port" - counter=$((counter + 1)) -done <<< "$USER_SERVERS" + counter=1 + declare -A server_map + while read -r line; do + ip=$(echo "$line" | cut -d ' ' -f 1) + port=$(echo "$line" | cut -d ' ' -f 2) + custom_name=$(echo "$line" | cut -d ' ' -f 3) + server_user=$(echo "$line" | cut -d ' ' -f 4) + server_authkey=$(echo "$line" | cut -d ' ' -f 6) + server_map[$counter]="$ip $port $server_user $server_authkey" + echo "$counter) $custom_name - $server_user $ip:$port" + counter=$((counter + 1)) + done <<< "$USER_SERVERS" -read -r -p "Votre choix (1-${#server_map[@]}): " choice + echo "$counter) Tapez 'quit' pour vous déconnecter." -if [ -z "$choice" ] || [ -z "${server_map[$choice]}" ]; then - echo "Sélection invalide." - exit 1 -fi + read -r -p "Votre choix (1-$counter): " choice -selected_server="${server_map[$choice]}" -echo "Connexion à $selected_server..." -if [ -z "$(echo "$selected_server" | cut -d ' ' -f 4)" ]; 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)" -else - cp /"$AUTHORIZED_SERVERS_PATH"/"$(echo "$selected_server" | cut -d ' ' -f 4)" /home/"$CONNECTED_USER"/"$(echo "$selected_server" | cut -d ' ' -f 4)" - chown "$CONNECTED_USER":"$CONNECTED_USER" /home/"$CONNECTED_USER"/"$(echo "$selected_server" | cut -d ' ' -f 4)" - chmod 600 /home/"$CONNECTED_USER"/"$(echo "$selected_server" | cut -d ' ' -f 4)" - 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)" -i /home/"$CONNECTED_USER"/"$(echo "$selected_server" | cut -d ' ' -f 4)" "$(echo "$selected_server" | cut -d ' ' -f 3)"@"$(echo "$selected_server" | cut -d ' ' -f 1)" - rm -rf /home/"${CONNECTED_USER:?}"/"$(echo "$selected_server" | cut -d ' ' -f 4)" -fi + if [ "$choice" == "quit" ]; then + exit 0 + elif [ -z "$choice" ] || [ -z "${server_map[$choice]}" ]; then + echo "Sélection invalide." + fi + + selected_server="${server_map[$choice]}" + echo "Connexion à $selected_server..." + if [ -z "$(echo "$selected_server" | cut -d ' ' -f 4)" ]; 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)" + else + cp /"$AUTHORIZED_SERVERS_PATH"/"$(echo "$selected_server" | cut -d ' ' -f 4)" /home/"$CONNECTED_USER"/"$(echo "$selected_server" | cut -d ' ' -f 4)" + chown "$CONNECTED_USER":"$CONNECTED_USER" /home/"$CONNECTED_USER"/"$(echo "$selected_server" | cut -d ' ' -f 4)" + chmod 600 /home/"$CONNECTED_USER"/"$(echo "$selected_server" | cut -d ' ' -f 4)" + 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)" -i /home/"$CONNECTED_USER"/"$(echo "$selected_server" | cut -d ' ' -f 4)" "$(echo "$selected_server" | cut -d ' ' -f 3)"@"$(echo "$selected_server" | cut -d ' ' -f 1)" + rm -rf /home/"${CONNECTED_USER:?}"/"$(echo "$selected_server" | cut -d ' ' -f 4)" + fi +} + +while true; do + main_menu +done \ No newline at end of file