URL: https://linuxfr.org/forums/programmationautre/posts/utiliser-git-ssh-et-sudo-en-utilisant-sa-cle-a-soi Title: Utiliser git+ssh et sudo en utilisant sa clé à soi ! Authors: Alex G. Date: 2013年01月22日T18:28:20+01:00 License: CC By-SA Tags: partage, ssh et git Score: 2 Avec mon collègue nous avons des environnements de test que nous utilisons tour à tour. Cet environnement est éventuellement chez un utilisateur _demo_ (par exemple) avec un groupe _demo_ auquel nous appartenons tous les deux. Le problème est que pour faire les mises à jour avec _git_, il faut posséder le dépôt (le dossier _.git_) car _git_ est un peu exclusif sur les permissions de certains fichiers là dedans (lors des _push_ et _pull_ en tout cas). Donc si je devais faire une mise à jour produit il me fallait d'abord lancer un violent `sudo chown moi: -R .`. Lourd ! Heureusement après une recherche de _git ssh-agent sudo_ sur le web, je suis tombé sur http://mybrainhurts.com/blog/2012/05/git-sudo-local-ssh-keys.html et j'ai pu m'en inspirer ! Donc si je veux pouvoir `git pull` avec l'utilisateur _demo_ je peux faire ça : $ chown :demo -R ${SSH_AUTH_SOCK%/*} $ chmod g+rwX -R ${SSH_AUTH_SOCK%/*} $ sudo -E -u demo git pull (ou bien sur faire toute une session avec `sudo -E -u demo -s`) À noter que ceci fonctionne si on utilise `ssh-agent` et, pour les serveurs distant, si l'on fait bien suivre les clés avec `ssh` (option `-A` ou `ForwardAgent`). Explication : `SSH_AUTH_SOCK` est la variable qui contient le socket de communication avec `ssh-agent`. `${SSH_AUTH_SOCK%/*}` contient donc le dossier parent (merci http://www.tldp.org/LDP/abs/html/string-manipulation.html). Le `chown` et `chmod` donnent donc accès au `ssh-agent` aux utilisateurs du groupe _demo_. L'option `-E` de _sudo_ conserve les variables d'environnement (dont le `SSH_AUTH_SOCK`). La commande _git_ va donc utiliser le `ssh-agent` de votre utilisateur pour se connecter au dépôt distant, le tour est joué ! Bien sur je met le $ chown :demo -R ${SSH_AUTH_SOCK%/*} $ chmod g+rwX -R ${SSH_AUTH_SOCK%/*} dans un fichier texte et je n'est plus qu'a utiliser `source` sur ce fichier pour l'utiliser. [EDIT] voir la solution de `git --shared` ci-dessous par sufflop, c'est bien mieux !