Comment pousser pour git sur EC2

J’essaie de suivre cette instruction. J’ai un repo git local et quand je fais un push git, j’ai besoin que le repo soit poussé vers mon instance EC2.

Mais, dans le tutoriel ci-dessus, quand je fais un git push origin master , je reçois une erreur Permission denied (publickey) parce que je n’ai pas spécifié le fichier d’identité.

Disons que je me connecte à EC2 comme ceci: ssh -i my_key.pem username@11.111.11.11

Alors, puis-je faire quelque chose de similaire à: git -i my_key.pem push origin master ou définir le fichier d’identité en .git/config

Alors, comment puis-je le configurer?

Mise à jour: sortie de git config -l

 user.name=my name user.email=my_email_addreess@gmail.com github.user=userid core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true core.ignorecase=true remote.origin.url=ec2_id@my_e2_ip_address:express_app remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* 

Mise à jour (du commentaire de @ Jon):

Si vous avez votre clé dans un chemin impair, lancez simplement ssh-add /private/key/path . Cela a fonctionné pour moi.

Pour copier votre clé ssh locale sur amazon, essayez ceci:

 cat ~/.ssh/id_?sa.pub | ssh -i amazon-generated-key.pem ec2-user@amazon-instance-public-dns "cat >> .ssh/authorized_keys" 

remplacer les noms de la clé et amazon ec2 publics DNS, bien sûr.

vous pourrez alors configurer votre télécommande sur amazon

Les instructions énumérées ici étaient plus utiles pour moi.

À partir du lien:

Ajustez votre ~/.ssh/config et ajoutez:

 Host example Hostname example.com User myuser IdentityFile ~/.ssh/other_id_rsa 

Utilisez maintenant l’alias de l’hôte ssh comme référentiel:

 $ git remote add origin example:repository.git $ git pull origin master 

Et il devrait utiliser la clé other_id_rsa !

Sur votre machine locale, éditez votre ~ / .ssh / config et ajoutez:

 Host example Hostname example.com User myuser IdentityFile ~/.ssh/YOURPRIVATEKEY 

Vous devriez pouvoir vous connecter à votre instance avec “ssh exemple”. Rappelez-vous que votre clé privée doit être chmod 400. Une fois que vous pouvez vous connecter sans utiliser “ssh -i mykey.pem username @ host”, procédez comme suit.

Sur votre instance EC2, initialisez un repository nu, qui est utilisé uniquement pour pousser. La convention est d’append l’extension “.git” au nom du dossier. Cela peut sembler différent de votre repo local qui a normalement comme dossier .git dans votre dossier “projet”. Les référentiels nus (par définition) ne comportent pas d’arbre de travail, vous ne pouvez donc pas facilement y append des fichiers comme vous le feriez dans un référentiel non nu normal. C’est juste comme ça que ça se passe. Sur votre instance ec2:

 mkdir project_folder.git cd project_folder.git git init --bare 

Maintenant, sur votre ordinateur local, utilisez l’alias de l’hôte ssh lors de la configuration de votre télécommande.

 git remote add ec2 EXAMPLEHOSTFROMSSHCONFIG:/path/to/project_folder.git 

Maintenant, vous devriez être capable de faire:

 git push ec2 master 

Maintenant, votre code est envoyé au serveur sans aucun problème. Mais le problème à ce stade, c’est que votre dossier www sur l’instance ec2 ne contient pas les “fichiers de travail” réels que votre serveur Web doit exécuter. Donc, vous devez configurer un script “hook” qui s’exécutera lorsque vous passez à ec2. Ce script remplira le dossier approprié de votre instance ec2 avec vos fichiers de projet réels.

Donc, sur votre instance ec2, allez dans votre répertoire project_folder.git / hooks. Créez ensuite un fichier appelé “post-receive” et chmod 775 (il doit être exécutable). Ensuite, insérez ce script bash:

 #!/bin/bash while read oldrev newrev ref do branch=`echo $ref | cut -d/ -f3` if [ "ec2" == "$branch" -o "master" == "$branch" ]; then git --work-tree=/var/www/example.com/public_html/ checkout -f $branch echo 'Changes pushed to Amazon EC2 PROD.' fi done 

Maintenant, sur votre machine locale, faites un “git push ec2 master” et cela devrait pousser le code vers votre serveur, puis le script hook post-reception extraira vos fichiers dans le dossier approprié que votre serveur web est configuré pour lire.

Vous devez générer et télécharger une clé SSH sur l’instance EC2. Suivez ce tutoriel: http://alestic.com/2010/10/ec2-ssh-keys

  1. Exécutez ssh-keygen localement
  2. Dans votre répertoire local ~/.ssh/ , vous devriez maintenant voir un fichier de clé publique appelé id_rsa.pub – copiez le contenu de ce fichier dans le fichier /etc/ssh/authorized_keys , qui se trouve sur votre serveur distant .

Vous pouvez soit copier et coller le contenu, soit télécharger le fichier sur votre serveur distant en premier et utiliser la commande suivante:

cat id_rsa.pub >> /etc/ssh/authorized_keys

Je me suis vu refuser la permission lors du déploiement via le contrôle des sources et je n’arrivais pas à comprendre pourquoi. Je me suis rendu compte que mon utilisateur créait une clé ssh (nommée ubuntu, également la connexion recommandée pour mon serveur ec2). L’exécution d’un ssh-keygen pour root et le téléchargement de cette clé ssh en tant que clé de déploiement de bitbucket ont permis de résoudre mes problèmes.

Je sais que je suis trop tard pour cela, mais je voulais juste partager cet article qui en quelques secondes j’ai réussi à passer à EC2 git repo

http://shirtdev.wordpress.com/2011/05/04/setting-up-a-git-repository-on-an-amazon-ec2-instance/

Voici la manière la plus simple qui a fonctionné le mieux pour moi … J’avais du mal à cloner un repository … il ne reconnaissait pas la clé SSH que j’avais créée … Au lieu de changer votre fichier de configuration et tout ça, j’ai simplement copié le REAL clé ssh il essayait de se connecter et j’ai ajouté ceci à bitbucket … voici la commande:

  sudo vi /root/.ssh/id_rsa.pub 

VI utilisé pour ouvrir la clé RSA REAL et copié le contenu et collé dans bitbucket … Done!

Je pense que je ne poste rien de nouveau ici, mais je devais fouiller dans les réponses ci-dessus pour aborder mon cas particulier. J’ai une instance Ubuntu sur EC2.

Pour me connecter à mon instance, je devais faire:

 ssh -i "pemfile.pem" ubuntu@very-long-amazon-address 

le fichier de clé “pemfile.pem” devait être entre guillemets.

J’ai ajouté la télécommande:

 remote add origin ubuntu@very-long-amazon-address/home/ubuntu/git/REPO/gitfile.git 

Mais quand j’ai essayé de pousser:

 git push origin master 

J’ai eu:

 Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 

Pour réparer, j’ai fait:

 //pemfile.pem 

Ce qui m’a donné une réponse,

 Identity added: //pemfile.pem (//pemfile.pem ) 

Après quoi la poussée est passée bien.

J’ai trouvé que c’était le moyen le plus rapide: https://gist.github.com/matthewoden/b29353e266c554e04be8ea2058bcc2a0

Fondamentalement:

ssh-add /path/to/keypair.pem (le “-add” doit être situé juste après le ssh)

vérifiez si cela fonctionne: ssh ubuntu@crazylongAWSIP (peut-être que votre nom d’utilisateur n’est pas ubuntu)

Après cela, vous pouvez configurer un repo git sur votre ec2 et y accéder:

 git remote add origin ec2Username@long-crazy-amazon-ip.com:/path/to/your/repo-name.git git config --global remote.origin.receivepack "git receive-pack" # needed for aws ec2 stuff. git push origin master 

Vous avez la possibilité de configurer un repository Git «nu» sur votre ec2 (ce qui signifie que d’autres git repos peuvent y accéder et y mettre des fichiers), ou vous pouvez configurer un repo NORMAL et pousser à elle directement (ma préférence si vous voulez pousser les modifications locales à votre ec2 sans avoir à constamment ssh dans votre ec2).

Si vous voulez configurer un repo NORMAL sur l’ec2, ssh dans l’ec2, faites un git init où vous voulez, puis faites ceci:

 git config receive.denyCurrentBranch updateInstead 

Voir: ne peut pas entrer dans git repository pour une explication de “recieve deny current branch”

Pour tous ceux qui pourraient être intéressés, cette solution s’est avérée la plus propre et la plus simple pour moi:

http://eric.sau.pe/accessing-a-git-repository-using-a-key-pair/