Salut (et désolé, je n’avais pas vu le post).
Il faut voir comment fonctionne yunohost settings
, mais dans les grandes lignes, après avoir modifié un fichier de configuration, il faut recharger la config.
Hors commandes spécifiques à yunohost, les fichiers de config SSH se trouve dans /etc/ssh
, et notamment /etc/ssh/sshd_config
qui est managé par Yunohost, et où on retrouve le port et les lignes suivantes :
# PLEASE: if you wish to force everybody to authenticate using ssh keys, run this command:
# yunohost settings set security.ssh.ssh_password_authentication -v no
PasswordAuthentication no
Si cette ligne est à yes
, alors tu peux toujours te logguer en utilisant un mot de passe.
Attention, si tu la passe à no
, vérifie bien que la ligne PubkeyAuthentication yes
est bien à yes
, sinon tu risque de t’enferme dehors.
Si tout est ok, tu peux faire un yunohost service reload_or_restart ssh
pour recharger la config.
Pour répondre aux questions :
sudo yunohost settings set security.ssh.ssh_password_authentication -v no
Avant : Parce que je ne vois pas comment faire si on a déjà modifié le port SSH ?
Après : Parce que, là aussi, que doit-on faire après avoir utilisé la commande ?
→ Le choix du port SSH est décorrélé de la façon de s’y connecter (par password ou clef)
→ Voir si-dessus pour ce qu’il faut faire après avoir modifier les fichiers de conf. Attention, je déconseille de jouer à la fois avec les commandes yunohost
et de faire des modifs manuellement.
Tu peux aussi mettre la commande dans un hook de regen-conf si tu veux conserver une config modifiée :
#!/bin/bash
# A placer dans /etc/yunohost/hooks.d/conf_regen/
# Yunohost et SSH : voir https://yunohost.org/en/ssh
# Yunohost et Sécurité : voir https://yunohost.org/en/security
# Spécificités Yunohost
action=$1 # Sommes-nous en train de faire l'étape "pre" ou "post" ?
pending_dir=$4 # Il s'agit du dossier dans lequel sont stockés les conf "pending"
# Dans cet exemple, il s'agit de surcharger la conf SSH ... qui est en fait dans `$pending_dir/../ssh` (généré par le hook ssh "de base") ... puis ensuite il s'agit d'une arborescende unix-like classique avec `etc/ssh/sshd_config` ...
ssh_conf=$pending_dir/../ssh/etc/ssh/sshd_config
# Si on est pas dans l'action pre, on sort tout de suite car on ne veut rien faire de spécial dans l'action post
[[ "$action" == "pre" ]] || exit 0
# Si le fichier à override n'existe pas ... on quitte sans rien faire de spécial. Cette ligne n'est pas ultra importante
[[ -e "$ssh_conf" ]] || exit 0
# Variables
USERS=(user) # liste des utilisateurs, à séparer par des espaces.
PORT=12345 # Port SSH (22 par défaut)
PWD=False # (True|False) : True pour autoriser l'authentification par mot de passe, False pour forcer l'authentification par clef
COMPATIBILITY=modern # (intermediate|modern) # Gestion de TLS 1.2, voir https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28default.29
for i in "${USERS[@]}" # on boucle sur les différents utilisateurs de l'array USERS
do
if [[ $(yunohost user list | grep "username: $i") != "" ]];then # si le user est un user yunohost
if [[ $(getent group ssh.main | grep $i) == "" ]]; then #Si le user n'appartient pas au groupe LDAP ssh
yunohost user permission add ssh $i #on ajoute le user au groupe ssh.main (groupe LDAP)
fi
elif [[ $(getent group ssh.app | grep $i) == "" ]]; then #Si l'utilisateur n'appartient pas au groupe UNIX ssh
usermod -a -G ssh.app $i #on ajoute le user au groupe ssh.app (groupe UNIX)
fi
done
# MaJ du port ssh
if [[ $(grep "Port $PORT" /etc/ssh/sshd_config) == "" ]]; then #test si le port ssh correspond à celui de la variable $PORT
yunohost settings set security.ssh.ssh_port -v $PORT
fi
# Révocation de la possibilité de se connecter avec un password.
#****** /!\ si $PWD=False, assurez vous d'avoir au préalable ajouté une clef à vos users ! /!\ ******
if [[ $(yunohost settings get security.ssh.ssh_password_authentication) != "$PWD" ]]; then #test si la possibilité se connecter en SSH avec un mot de passe correspond à la variable $PWD
if [[ $PWD == "False" ]]; then
yunohost settings set security.ssh.ssh_password_authentication -v no #on force l'authentification par clef
elif [[ $PWD == "True" ]]; then
yunohost settings set security.ssh.ssh_password_authentication -v yes #on autorise l'authentification par mot de passe
fi
fi
# Gestion TLS 1.2
if [[ $(yunohost settings get security.ssh.ssh_compatibility) != "$COMPATIBILITY" ]]; then #test si on est déjà dans le mode de compatibilité voulu
yunohost settings set security.ssh.ssh_compatibility -v $COMPATIBILITY
Pour faire du GeoIP sur SSH, ça me semble peu utile si obligation de s’authentifier avec une clef.
Je ne suis pas certains d’avoir vraiment répondu à tes questions, n’hésites pas si je suis à côté 