<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Waxtopia &#187; Administration</title>
	<atom:link href="https://waxtopia.fr/category/gnulinux/administration/feed/" rel="self" type="application/rss+xml" />
	<link>https://waxtopia.fr</link>
	<description>ENCORE un blog Wordpress, putain...</description>
	<lastBuildDate>Sat, 25 Jul 2015 18:27:29 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.39</generator>
	<item>
		<title>Utiliser Git à travers SSH sous GNU/Linux</title>
		<link>https://waxtopia.fr/utiliser-git-a-travers-ssh-sous-gnulinux/</link>
		<comments>https://waxtopia.fr/utiliser-git-a-travers-ssh-sous-gnulinux/#comments</comments>
		<pubDate>Tue, 11 Mar 2014 19:10:22 +0000</pubDate>
		<dc:creator><![CDATA[Blaxar]]></dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[GNU/Linux]]></category>

		<guid isPermaLink="false">http://waxtopia.fr/?p=91</guid>
		<description><![CDATA[On ne présente plus Git, le système distribué de contrôle de version pour gérer les projets de façon efficace, une alternative (par exemple) à SVN se voulant plus souple et plus performante. Ayant eu à faire la manipulation pour créer un dépôt sur mon serveur domestique et le rendre accessible via SSH avec une paire [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>On ne présente plus <strong>Git</strong>, le système distribué de contrôle de version pour gérer les projets de façon efficace, une alternative (par exemple) à SVN se voulant plus souple et plus performante.</p>
<p>Ayant eu à faire la manipulation pour créer un dépôt sur mon serveur domestique et le rendre accessible via SSH avec une paire de clés (publique et privée), je trouve intéressant d&#8217;en parler.</p>
<p>Bien que les explications ne manquent pas concernant les étapes de la démarche (Git étant bien documenté en soi), je vous propose une explication détaillée pour achever tout ceci d&#8217;un bout à l&#8217;autre.</p>
<p>On verra ainsi comment<strong> créer un utilisateur &#8220;git&#8221;</strong> sur le serveur, dont le rôle se limitera à exécuter des commandes Git, puis comment <strong>créer un premier dépot Git</strong>, que l&#8217;utilisateur susnommé sera seul à pouvoir manipuler, enfin nous limiterons l&#8217;accès à ce compte utilisateur en SSH avec l&#8217;utilisation de couples de clés publiques et privées, voilà pourquoi il faudra <strong>générer un couple de clés publique/privée</strong>.</p>
<h1>Création d&#8217;un utilisateur &#8220;git&#8221;.</h1>
<p>Cette étape n&#8217;est, en elle même, pas spécifique à l&#8217;utilisation de git (ni même compliquée en fait), mais elle reste nécessaire et c&#8217;est bien de la détailler pour quiconque faisant pour la première fois ce genre de manipulation.</p>
<p>Tout d&#8217;abord, on va créer notre utilisateur sur le serveur avec <em>useradd &lt;user&gt;</em>, on se donne les privilèges root (avec su ou en utilisant sudo) puis dans le terminal:<code><br />
# useradd git<br />
</code></p>
<p>À ce stade là, notre utilisateur <em>git</em> existe sur le système et sans fournir plus d&#8217;option que ça à la commande <em>useradd</em>, son dossier par défaut est <em>/home/git</em>, ça tombe bien c&#8217;est ce qu&#8217;on voulait mais il reste à créer ce dossier, rien de bien compliqué: un <em>mkdir</em> suffit.<code><br />
# mkdir /home/git<br />
</code></p>
<p>Maintenant il faut que ce dossier appartienne à notre utilisateur git et qu&#8217;il ait les droits en lecture et écriture dessus, on va respectivement utiliser <em>chown</em> et <em>chmod</em>:<code><br />
# chown git:users /home/git<br />
# chmod 755 /home/git<br />
</code></p>
<p>Là on vient de donner la propriété du dossier <em>/home/git</em> à l&#8217;utilisateur <em>git</em> et au groupe <em>users</em> qui désigne le groupe par défaut dans lequel un utilisateur se trouve à sa création, à défaut que celui-ci existe faites <em>chown git:git /home/git</em> et le dossier appartiendra au groupe &#8220;git&#8221; qui s&#8217;est créé en même temps que l&#8217;utilisateur).</p>
<p>On a également donné les droits en lecture/écriture/exécution à <em>git</em> sur son dossier, les membres du même groupe et les autres n&#8217;ont qu&#8217;un droit en lecture et exécution.</p>
<p>Là l&#8217;utilisateur est bien en place, on va pouvoir s&#8217;occuper de la création d&#8217;un premier projet Git !</p>
<h1>Création d&#8217;un projet Git.</h1>
<p>Avant toute chose, procurez-vous git pour votre distribution (bah oui !), dans le cas de Debian et ses dérivée (Mint, Ubuntu&#8230;) un <em>apt-get install git </em>avec les privilèges root devrait faire l&#8217;affaire, utilisant pour ma part <em>Archlinux,</em> un <em>pacman -S git</em> a fait le travail.</p>
<p>On va ensuite décider d&#8217;un dossier où placer tous les projets git, on va partir sur l&#8217;exemple de /opt/git, qu&#8217;il faut donc créer dans opt/.</p>
<p>Pour cela (toujours en root):<code><br />
# mkdir /opt/git<br />
# chown git:git /opt/git<br />
# chmod 755 /opt/git<br />
</code></p>
<p>En ayant fait l&#8217;étape d&#8217;avant on comprend ce que ces lignes font: créer un dossier <em>git/</em> dans <em>opt/</em> puis on octroie le dossier à l&#8217;utilisateur <em>git</em> et à lui uniquement (d&#8217;où le fait qu&#8217;on donne aussi <em>git</em> en nom de groupe à chmod), puis on définit les droits en lecteur/écriture/exécution pour que l&#8217;utilisateur puisse faire ce dont il a besoin dedans.</p>
<p>Il est temps de créer le projet, pour cela:<code><br />
# su git<br />
$ mkdir /opt/git/projet.git<br />
$ cd /opt/git/projet.git<br />
$ git init --bare<br />
</code></p>
<p>On passe d&#8217;abord en utilisateur git avec su (on ne peut d&#8217;ailleurs pas le faire autrement puisqu&#8217;il n&#8217;a pas de mot de passe associé), on créer un dossier destiné à contenir notre premier projet dans /opt/git, on va dedans puis on initialise le projet.</p>
<p>A ce stade le plus gros est fait pour Git, l&#8217;idée est maintenant de sécuriser et restreindre l&#8217;accès au dépôt qu&#8217;à certains utilisateurs auxquels on fait confiance, c&#8217;est à dire ceux pour qui le compte <em>git</em> sur le serveur possède la <strong>clé publique</strong>.</p>
<p>Cette clé servira à déchiffrer ce qu&#8217;un utilisateur donné a chiffré avec sa <strong>clé privée</strong>, SSH se servira des clés de lui-même, pourvu qu&#8217;elles soient aux bons endroits et qu&#8217;on les ait générées avant, c&#8217;est ce que nous allons faire !</p>
<p>&nbsp;</p>
<h1>Générer un couple de clés publique/privée.</h1>
<p>C&#8217;est assez simple, du coté de votre &lt;&gt;machine client&lt;&gt; (et non pas le serveur), tapez ceci dans un terminal en tant qu&#8217;utilisateur (pas en tant que root):<code><br />
$ ssh-keygen<br />
</code></p>
<p>l&#8217;utilisation de la commande <em>ssh-keygen</em> sans fournir d&#8217;argument génère deux fichiers dans le dossier <em>.ssh/</em> de votre répertoire <em>home</em>: <strong>id_rsa</strong> et <strong>id_rsa.pub</strong>, le premier contient votre clé privée et le second votre clé publique (d&#8217;où le <em>.pub</em>).</p>
<p>Le &#8220;rsa&#8221; présent dans les noms des fichiers désigne la méthode de chiffrement asymétrique utilisée, par défaut <em>ssh-keygen</em> utilise rsa, mais d&#8217;autres sont disponibles, comme <em>ecdsa</em> ou <em>dsa</em>, pour s&#8217;en servir il faut utiliser l&#8217;option <em>-t</em> de <em>ssh-keygen</em>:<code><br />
$ ssh-keygen -t ecdsa<br />
</code></p>
<p>Les deux fichiers générés seront alors <em>id_ecdsa</em> et id_ecdsa.pub.</p>
<p>Il est aussi possible de choisir la longueur des clés en nombre de bits grâce à l&#8217;option <em>-b</em>, le type de chiffrement conditionne les longueurs possibles utilisables (voir le man de <em>ssh-keygen</em>) pour l&#8217;option <em>-b</em>), exemple:<code><br />
$ ssh-keygen -t ecdsa -b 521<br />
</code></p>
<p>Notez que certaines méthodes de chiffrement sont plus robustes que d&#8217;autres, notamment <em>ecdsa</em> par rapport à <em>rsa</em>, retenez aussi qu&#8217;au plus la clé est longue, au plus le chiffrement sera difficile (et long) à casser, par exemple si vous voulez utiliser <em>rsa</em>, la longueur par défaut est de 2048 bits, il est possible d&#8217;augmenter ce nombre (voire de le doubler) toujours avec l&#8217;option <em>-b</em>.</p>
<h1>Importer sa clé publique sur le serveur.</h1>
<p>Bon, à ce stade le compte git sur le serveur est créé, un premier dépôt a été initialisé, et vous avez votre couple clé publique/privé.</p>
<p>Maintenant il va falloir que vous puissiez utiliser <em>git</em> au travers de <em>ssh</em> sur le serveur, pour cela il faut que l&#8217;utilisateur <em>git</em> sur le server ait votre <strong>clé publique</strong>.</p>
<p>Coté client: récupérez le contenu de votre fichier id_ecdsa.pub (ou id_rsa.pub, selon la méthode que vous avez utilisé) par exemple, en le faisant de mon coté:<code><br />
$ cat ~/.ssh/id_ecdsa.pub<br />
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBADysewrcaOUZl2wHNssiCwO2a6msDZ4FIOgjv9Hh5M1GQKcHQ3SiqJJWdOklnZ8Y7Jp65gF7gR/RL1qfvaQWSgZZgA58VBgZk9g8PMyok13Pn2i6ye9gQR94R1n/h7HyDHZXkpj91RskPE52u2qSZv3SDTZLOOeC4V/xCpj/f9ONf3usQ== blax@blax-arch<br />
</code></p>
<p>Là vous pouvez voir le contenu de mon fichier id_ecdsa.pub, la clé publique est (comme son nom le suggère) faite pour être connue des autres, à l&#8217;opposé de la <strong>clé privée que vous ne devez jamais divulguer</strong>.</p>
<p>On voit une longue ligne avec en premier le type de chiffrement utilisé, suivi de la clé en question (sa longueur dépend de ce que vous avez choisi de faire avec ssh-keygen), puis à la fin un commentaire (qui n&#8217;aura aucune incidence sur ce que SSH fera) qui indique mon nom d&#8217;utilisateur et le nom de ma machine, c&#8217;est complètement facultatif mais il est de mauvais aloi de le supprimer: c&#8217;est ce commentaire qui vous permettra par la suite de distinguer les clés les unes des autres (dans l&#8217;optique où vous en ajouteriez plusieurs).</p>
<p>il suffit ensuite simplement de&#8230; &#8220;copier-coller&#8221; ceci dans le fichier <em>authorized_keys</em> du dossier <em>.ssh/</em> de l&#8217;utilisateur <em>git</em> sur le serveur.<br />
Normalement ce fichier en question n&#8217;existe par encore, ni le dossier <em>.ssh/</em>, pas de problème, on peut les créer, comme les fois d&#8217;avant loguez vous sur le serveur avec votre compte utilisateur, passez en root puis faites:<code><br />
# su git<br />
$ mkdir ~/.ssh<br />
$ touch ~/.ssh/authorized_keys<br />
$ vi ~/.ssh/authorized_keys<br />
</code></p>
<p>le fichier a été créé, puis ouvert avec vi (ou vim, ou nano, comme vous voulez), insérer le contenu de votre id_ecdsa.pub à l’intérieur, puis sauvegardez.</p>
<p>Vous pouvez vérifier que ça s&#8217;est bien passé:<code><br />
$ cat /home/git/.ssh/authorized_keys<br />
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBADysewrcaOUZl2wHNssiCwO2a6msDZ4FIOgjv9Hh5M1GQKcHQ3SiqJJWdOklnZ8Y7Jp65gF7gR/RL1qfvaQWSgZZgA58VBgZk9g8PMyok13Pn2i6ye9gQR94R1n/h7HyDHZXkpj91RskPE52u2qSZv3SDTZLOOeC4V/xCpj/f9ONf3usQ== blax@blax-arch<br />
</code></p>
<p>Le contenu du fichier devrait être le même sur celui de votre &lt;em&gt;id_ecdsa.pub&lt;/em&gt; coté machine client.</p>
<p>Normalement à ce stade là tout devrait être bon MAIS (car il y a un mais) selon la configuration de sshd sur votre serveur, il se peut que votre utilisateur git n&#8217;ait pas le droit de se loguer en ssh.</p>
<p>Pour vérifier cela, contrôlez le contenu de <em>/etc/ssh/sshd_config</em> (en étant root sur le serveur), si la ligne <strong>AllowUsers</strong> est présente, cela veut dire que seuls les utilisateurs indiqués dans la directive ont le droit de se loguer en ssh sur la machine, ajoutez donc <em>git</em> à la liste des utilisateurs, ce qui devrait donner quelque chose du genre:<code><br />
AllowUsers blax git<br />
</code></p>
<p>Il me semble de bon ton de le préciser, puisque ça n&#8217;était pas indiqué dans la procédure que j&#8217;ai moi-même suivi pour configurer mon dépôt Git pour la première fois, j&#8217;ai donc perdu un certain temps là dessus, mais ça dépend de la configuration par défaut de sshd d&#8217;une distribution à l&#8217;autre.</p>
<h1>Utiliser (enfin) le dépôt Git.</h1>
<p>Ça y est, vous pouvez profiter de votre dépôt Git !</p>
<p>Sur votre machine client, avec votre compte utilisateur, essayez de cloner le dépôt:<code><br />
$ git clone ssh://git@monserveur/opt/git/projet.git<br />
</code></p>
<p>Si tout s&#8217;est bien passé, déjà il ne vous sera pas demandé de mot de passe, vous êtes sensé être authentifié à l&#8217;aide de votre clé privée (et pourvu que le serveur ait votre clé publique), si un mot de passe vous est demandé, revoyez l&#8217;étape concernant la génération de clé (et l&#8217;importation sur le serveur).</p>
<p>Au delà de la partie authentification, le dépôt devrait se cloner sans encombre coté client si il a été créé comme il faut coté serveur, sinon revoyez le début du tutoriel.</p>
]]></content:encoded>
			<wfw:commentRss>https://waxtopia.fr/utiliser-git-a-travers-ssh-sous-gnulinux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
