[SSH] Lockout depuis l'installation de Gitlab

Mon serveur YunoHost

Matériel: Serveur Dédié Kimsufi KS-4 (OVH)
Version de YunoHost: 3.7.0.12
J’ai accès à mon serveur : Par la webadmin et en SSH en temps normal
Êtes-vous dans un contexte particulier ou avez-vous effectué des modificiations particulières sur votre instance ? : non

Description du problème

Bonjour à tous,

Il y a quelques jours installé Gitlab sur mon instance Yunohost.
J’ai restauré une sauvegarde Gitlab qui était présente sur un serveur qui n’était pas sur Yunohost.

Jusqu’ici aucun problème, Gitlab fonctionne très bien.

Sauf que depuis l’installation, impossible de me connecter en SSH à mon serveur.
La connexion se fait bien et le serveur me demande un mot de passe. Mais même avec le bon mot de passe il est systématiquement refusé.
Ayant un accès à l’interface admin j’ai essayé de le modifier mais toujours le même problème. Le compte admin ne fonctionne pas non plus.

L’accès Git fonctionne très bien avec ma clef publique. Mais étant donné que c’est un accès git je n’ai pas accès au shell.

Ayant le mot de passe admin et les services d’API fonctionnel j’ai donc décidé d’ajouter une clef publique à mon utilisateur principale. Malheureusement même une fois la clef ajouté, SSH me demande un mot de passe.

A travers l’API j’ai aussi tenté l’exécution de commande Python mais j’ai une erreur venant du serveur. Il n’est pas précisé l’URL à utilisé et je pense que c’est pour ca.
Je me suis basé sur cette documentation: https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/actionsmap/yunohost.yml

Je pense vraiment que le problème vient de ma conf sshd mais je ne suis pas vraiment sur.
En cogitant j’ai réussi à extraire le fichier de conf depuis Nextcloud en créant un stockage externe local.

Le voici:

# This configuration has been automatically generated
# by YunoHost

Protocol 2
Port 22

ListenAddress ::
ListenAddress 0.0.0.0


HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key

# ##############################################
# Stuff recommended by Mozilla "modern" compat'
# https://infosec.mozilla.org/guidelines/openssh
# ##############################################


  # By default use "modern" Mozilla configuration
  # Keys, ciphers and MACS
  KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
  Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
  MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com


# Use kernel sandbox mechanisms where possible in unprivileged processes
UsePrivilegeSeparation sandbox

# LogLevel VERBOSE logs user's key fingerprint on login.
# Needed to have a clear audit track of which key was using to log in.
SyslogFacility AUTH
LogLevel VERBOSE

# #######################
# Authentication settings
# #######################

# Comment from Mozilla about the motivation behind disabling root login
#
# Root login is not allowed for auditing reasons. This is because it's difficult to track which process belongs to which root user:
#
# On Linux, user sessions are tracking using a kernel-side session id, however, this session id is not recorded by OpenSSH.
# Additionally, only tools such as systemd and auditd record the process session id.
# On other OSes, the user session id is not necessarily recorded at all kernel-side.
# Using regular users in combination with /bin/su or /usr/bin/sudo ensure a clear audit track.

LoginGraceTime 120
PermitRootLogin no
StrictModes yes
PubkeyAuthentication yes
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
AllowUsers pouet, git
AuthorizedKeysFile /var/opt/gitlab/.ssh/authorized_keys

# Change to no to disable tunnelled clear text passwords
# (i.e. everybody will need to authenticate using ssh keys)
#PasswordAuthentication yes

# Post-login stuff
#Banner /etc/issue.net
PrintMotd no
PrintLastLog yes
ClientAliveInterval 60
AcceptEnv LANG LC_*

# SFTP stuff
Subsystem sftp internal-sftp
Match User sftpusers
        ForceCommand internal-sftp
        ChrootDirectory /home/%u
        AllowTcpForwarding no
        GatewayPorts no
        X11Forwarding no

# root login is allowed on local networks
# It's meant to be a backup solution in case LDAP is down and
# user admin can't be used...
# If the server is a VPS, it's expected that the owner of the
# server has access to a web console through which to log in.
Match Address 192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,169.254.0.0/16,fe80::/10,fd00::/8,*mon_ip_a_moi*
        PermitRootLogin yes

Malheureusement Nginx n’ayant pas les droits sur le fichier, impossible de le modifier.

J’ai eu une idée qui pourrai fonctionner si j’arrive à exécuter des commandes au travers de l’API:

  1. Créer un dépôt git de test
  2. Uploader un script bash ou python qui modifiera le fichier /etc/ssh/sshd_config
  3. Exécuter un commande au travers de l’API qui lancera ce fameux script

Par contre je pense que même si j’arrive à exécuter une commande au travers de l’API, un problème de droit risque encore de se poser.

Si vous avez des suggestions je suis preneur.
Merci beaucoup.

Bon j’ai trouvé pourquoi je n’arrive pas à me connecter avec mon mot de passe.

C’est à cause de la ligne
AllowUsers pouet, git
Les utilisateurs doivent être séparé par des espaces et non des virgules. Grosse erreur de ma part.

Par contre même en désactivant la ligne
AuthorizedKeysFile /var/opt/gitlab/.ssh/authorized_keys
Impossible de me connecter avec la clef ajouté depuis l’API…

Pour info j’ai réussi à modifier mon fichier sshd_config en passant par le mode rescue d’OVH.

Si quelqu’un à une idée pour les SSH via API je suis preneur.

A mon avis cette ligne n’est pas censée contenir un chemin précis. Elle est censé décrire où les utilisateurs stockent leur clef, ce qui est généralement chacun dans leur home respectif (donc pas dans /var/opt/gitlab…)

Regarde sur internet les exemples. D’ailleurs il me semble que la bonne ligne est dans la conf de base et tu n’as normalement pas besoin d’y toucher …

Merci pour ta réponse.

Selon la documentation il est possible d’indiquer un fichier précis. Dans mon cas j’avais ajouté cette ligne car Gitlab ne prenais pas en compte les clefs ajouté sur un profil ou sur un projet pour les déploiements.
C’était un bug de Gitlab => git clone git@... asks for password also if ssh key is added · Issue #103 · YunoHost-Apps/gitlab_ynh · GitHub

AuthorizedKeysFile
Spécifie le fichier contenant les clefs publiques à utiliser pour l’authentification de l’utilisateur. AuthorizedKeysFile peut contenir des jetons de la forme %T qui sont substitués lors des réglages de la connexion. Les jetons suivant sont définis : %% est remplacé par le caractère « % », %h est remplacé par le répertoire de base (home directory) de l’utilisateur qui s’authentifie et %u est remplacé par le nom de cet utilisateur. Après substitution, AuthorizedKeysFile peut être un chemin absolu ou relatif au répertoire de base de l’utilisateur. Par défaut « .ssh/authorized_keys ».

En commentant la ligne il devrait récupérer la valeur par défaut qui devrait s’apparenter à ça:
AuthorizedKeysFile %h/.ssh/authorized_keys
J’ai donc essayé de commenter et d’ajouter manuellement la ligne dans la config mais ca ne fonctionne toujours pas.

Après vérification les changements apportés depuis l’API, sont bien répercutés sur le fichiers authorized_keys de l’utilisateurs.

Pour être sur que le problème ne vienne pas de la façon dont l’API écrit la clef dans le fichier, j’ai tout de même fait un test avec ssh-copy-id et toujours le même problème. Je m’en serait douté mais je voulais être sur. Je pense bien que je ne suis pas la seule personne à utiliser l’API pour gérer les clefs.

Voila un verbose ssh de ce qui se passe lorsque je me connecte:

OpenSSH_8.0p1 Ubuntu-6build1, OpenSSL 1.1.1c  28 May 2019
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to *pouetpouet*.fr [*pouetpouet*] port 22.
debug1: Connection established.
debug1: identity file /home/gestion/.ssh/id_rsa type 0
debug1: identity file /home/gestion/.ssh/id_rsa-cert type -1
debug1: identity file /home/gestion/.ssh/id_dsa type -1
debug1: identity file /home/gestion/.ssh/id_dsa-cert type -1
debug1: identity file /home/gestion/.ssh/id_ecdsa type -1
debug1: identity file /home/gestion/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/gestion/.ssh/id_ed25519 type -1
debug1: identity file /home/gestion/.ssh/id_ed25519-cert type -1
debug1: identity file /home/gestion/.ssh/id_xmss type -1
debug1: identity file /home/gestion/.ssh/id_xmss-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.0p1 Ubuntu-6build1
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.4p1 Debian-10+deb9u7
debug1: match: OpenSSH_7.4p1 Debian-10+deb9u7 pat OpenSSH_7.0*,OpenSSH_7.1*,OpenSSH_7.2*,OpenSSH_7.3*,OpenSSH_7.4*,OpenSSH_7.5*,OpenSSH_7.6*,OpenSSH_7.7* compat 0x04000002
debug1: Authenticating to pouetpouet.fr:22 as 'pouet'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256@libssh.org
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:dPBZDqaM9SsjTM+KmARuL98JgQhnRs+88vLchTXzDrs
debug1: Host pouetpouet.fr' is known and matches the ECDSA host key.
debug1: Found key in /home/gestion/.ssh/known_hosts:3
debug1: rekey out after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey in after 134217728 blocks
debug1: Will attempt key: /home/gestion/.ssh/id_rsa RSA SHA256:FHJaVzglZesDG9t1PV+15Q9sHyeyAiO+5ROTCgaerL0 agent
debug1: Will attempt key: /home/gestion/.ssh/id_dsa 
debug1: Will attempt key: /home/gestion/.ssh/id_ecdsa 
debug1: Will attempt key: /home/gestion/.ssh/id_ed25519 
debug1: Will attempt key: /home/gestion/.ssh/id_xmss 
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521>
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/gestion/.ssh/id_rsa RSA SHA256:FHJaVzglZesDG9t1PV+15Q9sHyeyAiO+5ROTCgaerL0 agent
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/gestion/.ssh/id_dsa
debug1: Trying private key: /home/gestion/.ssh/id_ecdsa
debug1: Trying private key: /home/gestion/.ssh/id_ed25519
debug1: Trying private key: /home/gestion/.ssh/id_xmss
debug1: Next authentication method: password

J’ai aussi tenté de changer le chmod sur le fichier authorized_keys au cas où. Mais toujours pas.

C’est vraiment étrange sachant que les connexion venant de git fonctionne très bien.
Sur un ordinateur dont la clef publique a été ajouté sur Gitlab si je me connecte avec l’utilisateur git, je suis immédiatement connecté.

Est-ce que tu es sur des permissions sur tes fichiers. Typiquement une erreur courante se produit lorsque ton fichier est lisible/écrivable par d’autres users …

Regarde bien les permissions via :

ls -ld /var/opt/gitlab/
ls -ld /var/opt/gitlab/.ssh/
ls -ld /var/opt/gitlab/.ssh/authorized_keys

(en supposant que /var/opt/gitlab est bien le home qui a été défini pour gitlab, c.f. “grep gitlab /etc/passwd”)

Oui pour être sur des permissions j’avais utilisé la command chmod avec l’option --reference pour être sur d’avoir les mêmes droits pour le dossier de l’utilisateur, le dossier .ssh et le fichier authorized_keys.

Et oui l’utilisateur git est bien dans /var/opt/gitlab après vérification.

This topic was automatically closed 15 days after the last reply. New replies are no longer allowed.