Comment pousser à git sur EC2

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

mais, dans le tutoriel ci-dessus, quand je fais un git push origin master , j'obtiens une erreur Permission denied (publickey) parce que je n'ai pas spécifié le fichier d'identité.

Dis, je me connecte à l'EC2 comme ceci: ssh -i my_key.pem username@11.111.11.11

donc, Puis-je faire quelque chose de similaire ici à: git -i my_key.pem push origin master ou set le dossier d'identité dans .git/config

alors, comment l'installer?

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 (à partir de @Jon commentaire ):

si vous avez votre clé dans un chemin Impair, Lancez ssh-add /private/key/path . Cela a fonctionné pour moi.

73
demandé sur Community 2011-01-08 09:39:59

11 réponses

pour copier votre clé SSH locale à amazon essayez

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

remplaçant les noms de la clé et amazon ec2 public dns, Bien sûr.

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

46
répondu realgt 2016-01-29 20:47:41

les instructions énumérées ici m'ont été plus utiles.

à Partir du lien:

ajuster votre ~/.ssh/config et ajouter:

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

utilisez maintenant l'alias de l'hôte ssh comme votre dépôt:

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

et il devrait utiliser la touche other_id_rsa !

26
répondu TinyTimZamboni 2012-10-04 05:52:20

sur votre machine locale, éditez votre ~/.ssh/config et d'ajouter:

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

vous devriez pouvoir vous connecter à votre instance avec"SSH example". Rappelez-vous que votre clé privée devrait être chmod 400. Une fois que vous pouvez SSH in sans utiliser "SSH-I mykey.pem username@host", faites ce qui suit.

sur votre instance EC2, initialisez un dépôt nu, qui est utilisé pour push to exclusivement. La convention est d'ajouter l'extension ".git" au nom du dossier. Ce peut apparaître différent de votre repo local qui a normalement as .dossier git à l'intérieur de votre dossier "projet". Les dépôts nus (par définition) n'ont pas d'arbre de travail attaché à eux, de sorte que vous ne pouvez pas facilement ajouter des fichiers à eux comme vous le feriez dans un dépôt normal non-nu. C'est juste qu'ils manière dont c'est fait. Sur votre instance ec2:

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

Maintenant, de retour sur votre machine locale, utilisez l'alias d'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 pouvoir faire:

git push ec2 master

maintenant votre code est poussé sur le serveur sans 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" que votre serveur web doit exécuter. Donc, vous devez configurer un "crochet" script qui s'exécute lorsque vous poussez à l'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 project_folder.répertoire git/hooks. Ensuite, créez un fichier appelé "post-recevoir" et chmod 775 (il doit être exécutable). Puis 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 il devrait pousser le code à votre repo Nu, Et alors le script de crochet post-receive vérifiera vos fichiers dans le dossier approprié que votre serveur web est configuré pour lire.

19
répondu devdrc 2017-07-18 19:45:48

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

5
répondu Jon 2011-01-08 06:43:59
  1. Exécuter ssh-keygen localement
  2. dans votre Local ~/.ssh/ répertoire vous devriez maintenant voir un clé publique fichier appelé id_rsa.pub - copier le contenu de ce fichier dans le /etc/ssh/authorized_keys fichier, qui est situé sur votre serveur distant .

vous pouvez soit copier-coller le contenu, soit télécharger le fichier vers votre ordinateur distant serveur d'abord et utilisez la commande suivante:

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

2
répondu Alastair 2016-10-28 08:51:41

je recevais des permission denied lors du déploiement via le contrôle à la source et ne pouvais pas comprendre pourquoi. J'ai réalisé que mon utilisateur pour lequel je créais une clé ssh (appelée ubuntu, également la connexion recommandée pour mon serveur ec2) n'était pas l'utilisateur responsable de cap deploy (root). Exécuter un ssh-keygen pour root et télécharger cette clé SSH comme clé de déploiement pour bitbucket a résolu mes problèmes.

0
répondu Danny 2013-02-16 05:21:41

je sais que je suis trop en retard pour ça mais je voulais juste partager cet article qui en quelques secondes j'ai réussi à pousser à EC2 git repo

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

0
répondu JoenasE 2013-08-29 14:11:50

voici le moyen le plus facile qui a fonctionné grand pour moi... J'avais du mal à cloner un dépôt... il ne reconnaissait pas la clé SSH que j'ai créée... Au lieu de changer votre fichier de configuration et tout ça, j'ai simplement copié la vraie clé ssh avec laquelle il essayait de se connecter et j'ai ajouté ceci à bitbucket... voici la commande:

 sudo vi /root/.ssh/id_rsa.pub

utilisait VI pour ouvrir la vraie clé RSA et copiait le contenu et collé dans bitbucket... Fait!

0
répondu rckehoe 2013-12-01 03:24:57

Je ne poste rien de nouveau ici, je pense, mais j'ai dû creuser à travers 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 "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:

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

pour fixer, j'ai fait:

/<path to pemfile>/pemfile.pem

qui m'a donné une réponse,

Identity added: /<path to pemfile>/pemfile.pem (/<path to pemfile>/pemfile.pem )

après quoi la poussée a traversé fine.

0
répondu guero64 2017-08-18 00:08:43

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

en gros:

ssh-add /path/to/keypair.pem (le"-ajouter" doit être à DROITE APRÈS le ssh)

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

après cela vous pouvez mettre en place un git repo sur votre ec2 et pousser à elle:

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

vos options sont de configurer un "bare" git repo sur votre ec2 (ce qui signifie que d'autres git repos peuvent tirer de lui et pousser à lui, mais il ne tiendra pas de fichiers), ou vous pouvez configurer un repo NORMAL et pousser à lui directement (ma préférence Si vous voulez pousser les changements locaux à votre ec2 sans avoir à constamment ssh dans votre ec2).

Si vous voulez mettre en place une NORMALE repo sur l'ec2, ssh à l'ec2, faire un git init où vous voulez, et puis cela:

git config receive.denyCurrentBranch updateInstead

Voir: ne peut pas pousser dans le dépôt git pour l'explication de "recevoir refuser actuelles de la direction générale"

0
répondu rikkitikkitumbo 2017-10-20 18:17:27

pour tous ceux qui pourraient être intéressés, Cette solution s'est avérée la plus propre et la plus facile pour moi:

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

-1
répondu Tyguy7 2015-03-27 17:53:54