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.
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
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
!
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.
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
- Exécuter
ssh-keygen
localement - 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
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.
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 /
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!
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.
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"
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 /