2017-06-10 6 views
2

J'ai un crochet Git update qui vérifie si la branche en cours de mise à jour est maître et si oui, envoie un message d'erreur au client. Je voudrais maintenant faire en sorte que seulement push es à maîtriser que je vais faire passer.Comment déterminer l'empreinte SSH du client pour l'utiliser dans le crochet Git

Actuellement, j'ai deux clés SSH ajoutées au authorized_keys d'un utilisateur git. L'un d'eux est à moi, et j'ai l'intention d'en ajouter d'autres. Je lis here:

Si vous avez permis à chacun de se connecter avec un seul utilisateur (comme « git ») via une authentification par clé publique, vous devrez peut-être donner à cet utilisateur une enveloppe shell qui détermine quel utilisateur se connecte basé sur la clé publique et définir une variable d'environnement en conséquence.

Mais ils n'expliquent pas comment faire cela, et je ne trouve aucun exemple de la façon de faire une telle chose. Comment déterminez-vous l'empreinte digitale de la machine qui passe en SSH? J'ai également envisagé de créer un compte d'utilisateur séparé "git-admin", mais les dépôts nus sont dans le répertoire/home/git, et je ne pouvais pas penser à la façon d'amener les deux utilisateurs au même référentiel avec la même URL. Je ne peux pas faire que les utilisateurs partagent le même répertoire de base car alors le authorized_keys s'appliquerait aux deux, et je n'aurais aucun moyen de définir une variable d'environnement uniquement pour l'un et pas l'autre.

Mon serveur fonctionne sur FreeBSD.

Avez-vous des idées sur la façon d'atteindre ce que j'essaie de faire?

Répondre

1

Ceci est appelé ssh forced command, and is used for instance by gitolite

Vous pouvez soit:

  • installer gitolite sur le côté serveur, qui profite de cette fonctionnalité ssh native, et peut limiter écriture (push) l'accès à certaines branches .
    Il s'agit d'un authorization layer et you can test for access for specific branches.

    if gitolite access -q reponame username W master 
    then 
        ... 
    
  • ou modifier votre ~/.ssh/authorized_keys pour ajouter une commande forcée, qui est un script appelé un appel ssh, qui peut alors tester quelle clé est impliqué dans cet appel, vous identifier et de laisser passer la commande.
    C'est ce qu'un « ssh commande forcée » signifie (et cela n'a rien à voir avec Git)

+0

Il a travaillé :) Je ne aurais jamais trouvé où cette fonctionnalité aurait pu être accessible à partir! Je vous remercie! – papiro

+0

Je tiens à mentionner que je suis allé avec l'option 'environment =', dans laquelle j'ai défini la variable d'environnement USER au nom du propriétaire de la clé. – papiro

+0

Bien fait. Cela devrait fonctionner. – VonC