web-dev-qa-db-fra.com

Comment pousser pour git sur EC2

J'essaie de suivre cette instruction. J'ai un dépôt git local et lorsque je fais un push git, j'ai besoin que le dépôt soit poussé vers mon instance EC2.

Mais, dans le didacticiel ci-dessus, lorsque je fais un git Push Origin master, J'obtiens une erreur Permission denied (publickey) car je n'ai pas spécifié le fichier d'identité.

Dites, je me connecte à EC2 comme ceci: ssh -i my_key.pem [email protected]

Alors, puis-je faire quelque chose de similaire ici: git -i my_key.pem Push Origin master Ou définir le fichier d'identité dans .git/config

Alors, comment puis-je le configurer?

Mise à jour: sortie de git config -l

user.name=my name
[email protected]
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 (de @ Jon's commentaire ):

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

75
zengr

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"

en remplaçant les noms de la clé et du DNS public Amazon ec2, bien sûr.

vous pourrez ensuite configurer votre télécommande sur Amazon

48
realgt

Les instructions listées ici m'ont été plus utiles.

Depuis le lien:

Ajustez votre ~/.ssh/config et ajouter:

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

Utilisez maintenant l'alias d'hôte ssh comme référentiel:

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

Et il doit utiliser le other_id_rsa clé!

27
TinyTimZamboni

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

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

Vous devriez pouvoir vous connecter à votre instance avec "exemple ssh". N'oubliez pas que votre clé privée doit être chmod 400. Une fois que vous pouvez utiliser ssh sans utiliser "ssh -i mykey.pem username @ Host", procédez comme suit.

Sur votre instance EC2, initialisez un référentiel nu, qui est utilisé pour pousser vers exclusivement. La convention consiste à ajouter l'extension ".git" au nom du dossier. Cela peut sembler différent de votre référentiel local qui a normalement comme dossier .git à l'intérieur de votre dossier "projet". Les référentiels nus (par définition) ne sont pas associés à une arborescence de travail, vous ne pouvez donc pas facilement y ajouter des fichiers comme vous le feriez dans un référentiel normal non nu. C'est juste leur façon de procéder. Sur votre instance ec2:

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

Maintenant, de retour sur votre ordinateur local, 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é vers le 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 pousserez vers ec2. Ce script remplira le dossier approprié sur 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). Insérez ensuite 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 vers votre référentiel nu, puis le script de raccordement post-réception extraira vos fichiers dans le dossier approprié que votre serveur Web est configuré pour lire.

19
devdrc

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
Jon

J'ai trouvé que c'était le moyen le plus rapide: https://Gist.github.com/matthewoden/b29353e266c554e04be8ea2058bcc2a

Fondamentalement:

ssh-add /path/to/keypair.pem (le "-add" doit être juste après le ssh)

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

Après cela, vous pouvez configurer un dépôt git sur votre ec2 et y pousser:

git remote add Origin [email protected]:/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 dépôt git `` nu '' sur votre ec2 (ce qui signifie que d'autres dépôts git peuvent en tirer et y pousser, mais il ne contiendra aucun fichier), ou vous pouvez configurer un dépôt et un push NORMAL pour lui directement (ma préférence si vous voulez pousser les changements locaux sur 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 procédez comme suit:

git config receive.denyCurrentBranch updateInstead

Voir: ne peut pas pousser dans le référentiel git pour l'explication de "recieve deny current branch"

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

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

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

2
Alastair

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

/<path to pemfile>/pemfile.pem

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

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

Après quoi le Push s'est bien passé.

1
guero64

J'obtenais autorisation refusée lors du déploiement via le contrôle de source et je ne pouvais pas comprendre pourquoi. J'ai réalisé que mon utilisateur pour lequel je créais une clé ssh (nommé ubuntu, également la connexion recommandée pour mon serveur ec2) n'était pas l'utilisateur qui était responsable du déploiement de la cape (racine). 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 sur bitbucket ont résolu mes problèmes.

0
Danny

Voici la manière la PLUS FACILE qui a très bien fonctionné pour moi ... J'avais du mal à cloner un référentiel ... 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 avec laquelle il essayait de se connecter et j'ai ajouté ceci à bitbucket ... voici la commande:

 Sudo vi /root/.ssh/id_rsa.pub

Utilisé VI pour ouvrir la clé REAL RSA et copié le contenu et collé dans bitbucket ... Terminé!

0
rckehoe

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

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

0
JoenasE