Gitlab ne fonctionne pas avec les clés SSH

10

J'ai des problèmes avec Gitlab. J'ai utilisé le guide suivant pour installer et configurer Gitlab https://github.com/gitlabhq/gitlab-recipes/blob/master/install/centos/README.md . L'installation semblait bien se passer et tout. L'application Web semble bien fonctionner. Cependant je ne peux pas cloner, tirer, pousser, je ne peux pas utiliser Gitlab. J'ai vu 403 erreurs avec HTTP et autorisation refusée lors de la tentative de clonage via SSH.

Je me suis assuré que mes clés privées sont correctement configurées sur Windows et OS X. Je peux voir les clés publiques sur le serveur. J'ai ajouté ce qui suit à mon fichier de configuration dans ~ / .ssh.config

Host {hostname}
    User git
    Hostname {hostname}
    PreferredAuthentications publickey
    IdentityFile C:/Users/{username}/.ssh/id_rsa

Voici ce que je vois dans / var / log / secure

Jan 14 17:31:48 dev_version_control sshd[3696]: Connection closed by 192.168.17.113
Jan 14 17:32:18 dev_version_control sshd[3700]: Connection closed by 192.168.17.113

Le /var/log/messagerôle n'a pas été utilisé lorsque j'ai essayé d'utiliser git ou ssh

Je ne sais pas où aller d'ici. Aucune suggestion?

Je ne sais pas ce que vous entendez par SSH en utilisant le nom d'utilisateur git. Le guide que j'ai utilisé n'a pas créé de mot de passe pour l'utilisateur git et a déclaré que l'utilisateur ne peut pas être utilisé pour se connecter.

greyfox
la source
Êtes-vous capable de SSH sur le serveur Git en tant qu'utilisateur 'git'? Pouvez-vous essayer d'ajouter le paramètre «-vvv» pour obtenir une sortie supplémentaire sur la raison de la fermeture de la connexion? Il peut également être utile de vérifier les fichiers / var / log / secure et / var / log / messages pour voir s'il y a des erreurs dedans.
jaseeey
Les clés publiques ne sont pas configurées sur le client - vous devez vous assurer que vos clés privées sont sur votre client. Les clés publiques vont sur le serveur.
EEAA
Mis à jour ma question. J'espère que cela aide
greyfox

Réponses:

10

À condition que vous ayez chargé votre clé privée sur votre client, cela peut sembler être un problème d'autorisations sur le répertoire personnel de l'utilisateur 'git' et le répertoire .ssh.

Veuillez essayer de changer votre répertoire / home / git en un masque de 0711:

chmod 0711 /home/git

Assurez-vous que le répertoire /home/git/.ssh a un masque de 0700:

chmod 0700 /home/git/.ssh

Assurez-vous que le fichier /home/git/.ssh/authorized_keys a un masque de 0600:

chmod 0600 /home/git/.ssh/authorized_keys

Remplacez / home / git par quel que soit votre répertoire personnel pour l'utilisateur 'git', s'il était différent dans le tutoriel. S'il ne s'agit pas d'autorisations, veuillez laisser un commentaire et nous verrons quel pourrait être le problème.

jaseeey
la source
C'était peut-être le problème. Je suis capable de cloner en utilisant git clone git @ {hostname}: {workspace} / {repository} sur mon Mac. Malheureusement, j'ai laissé ma machine Windows au travail, je devrai donc essayer demain. L'authentification par clé publique / privée ne fonctionne-t-elle pas sur HTTP avec Gitlab? J'avais l'impression que c'était comme ça que Github fonctionnait, mais je peux me tromper.
greyfox
L'authentification par clé publique / privée ne fonctionne que via SSH. Si vous utilisez HTTP, vous devrez utiliser votre nom d'utilisateur et votre mot de passe pour faire quoi que ce soit. Si vous utilisez une nouvelle version de Git, comme la v1.8, alors il devrait vous demander un nom d'utilisateur et un mot de passe. Les anciennes versions de Git ne le font pas, vous devez donc ajouter votre nom d'utilisateur et votre mot de passe en ligne de la télécommande (c'est-à-dire https://username:[email protected]/repo.git)
jaseeey
Ahhhh ça a beaucoup plus de sens maintenant. Est-ce que l'application GitHub pour Windows stocke les informations d'identification? Merci beaucoup pour l'aide!
greyfox
Je n'ai pas beaucoup utilisé l'application GitHub Windows, mais je pense que de mémoire, elle nécessitait une connexion lorsque vous l'ouvrez, donc je dirais que stocke les informations d'identification pour vous éviter de les saisir tout le temps.
jaseeey
1

Vérifiez que vous n'avez qu'un seul enregistrement pour votre clé publique (qui a été importée via la face Web) /home/git/.ssh/authorized_keyset que cette clé a le préfixe et le titre de gitlab. En d'autres termes, si vous avez ajouté la même clé manuellement avant d'installer gitlab, supprimez-la.

sinm
la source
Vous pouvez avoir plusieurs clés dedans et vous pourrez vous connecter à condition que votre clé privée puisse correspondre ...
jaseeey
@Jason, je viens de modifier pour expliquer plus précisément
sinm
Merci, c'était tout pour moi. J'avais mis ma clé ssh manuellement avant d'utiliser Gitlab pour ajouter une clé et les clés en double ont causé des problèmes.
6 pieds Dan
1

Je recommanderais également de vérifier que l'utilisateur a la permission appropriée de cloner / tirer / pousser dans gitlab. Je viens de passer trop de temps à parcourir les configurations ssh / https, alors que la raison du problème était que l'utilisateur dans gitlab n'avait pas assez d'autorisations ...

shtolik
la source
1

Dans ma situation, j'ai installé gitlab via des packages FreeBSD. Gitlab SSH ne fonctionnait pas. La cause de ceci était un mauvais répertoire personnel pour git: (vipw)

git:*:211:211::0:0:gitosis user:/usr/local/git:/bin/sh

J'ai changé cela en:

git:*:211:211::0:0:gitosis user:/home/git:/bin/sh
gamecreature
la source
1

Cela peut se produire si l'hôte a un «-» dans son nom. (Même si cela est légal selon la RFC 952. )

ssh me demande un mot de passe pour tout hôte qui se trouve avoir un «-» dans son nom. Cela semblerait être purement un problème avec l'analyse du fichier de configuration ssh car l'ajout d'un alias à ~ / .ssh / config (et l'utilisation de cet alias dans mes URL distantes git) a résolu le problème.

En d'autres termes, essayez de mettre quelque chose comme ceci dans votre C: / Users / {username} /. Ssh / config

Host {a}
    User git
    Hostname {a-b.domain}
    IdentityFile C:/Users/{username}/.ssh/id_rsa

et où vous avez une télécommande du formulaire

origin  [email protected]:repo-name.git

supprimez-le puis ré-ajoutez-le en utilisant le formulaire

origin  git@a:repo-name.git
SensorSmith
la source
1

Si vous utilisez des variables d'environnement pour transmettre la clé, vous devez les coder en base64, sinon elles échoueront probablement avec une erreur vous demandant votre phrase secrète. Cela signifie que la clé est corrompue. Si tu vois:

$ ssh-add <(echo "$SSH_PRIVATE_KEY")
Enter passphrase for /dev/fd/63: ERROR: Job failed: exit code 1

Ensuite, base64 code la variable SSH_PRIVATE_KEY. Si vous êtes sous OS X,

cat ~/.ssh/ssh_key_for_project | base64 | pbcopy

va l'encoder et le copier dans votre presse-papiers. Maintenant, changez la ligne de script .gitlab-ci.yml en

- ssh-add <(echo "$SSH_PRIVATE_KEY" | base64 -d)
Jonathan Wilkins
la source
0

L'exécution a eval $(ssh-agent)résolu mon problème.

michalzuber
la source
0

Mon problème était que le fichier de clés privées id_rsa créé et enregistré par puttygen a un format différent de celui créé à partir d'une machine ubuntu. Après avoir créé une paire de clés à partir de la machine Ubuntu, copiez ces fichiers sur la machine Windows sous le dossier% UserProfile% .ssh, puis ajoutez la nouvelle clé publique générée à Gitlab. Plus aucune autorisation refusée pour moi

Quang Le
la source