Как подтолкнуть к Git на EC2


Я пытаюсь следовать этой инструкция. У меня есть локальное РЕПО git, и когда я делаю git push, мне нужно, чтобы РЕПО было перемещено в мой экземпляр EC2.

но, в приведенном выше уроке, когда я делаю git push origin master, Я Permission denied (publickey) ошибка, потому что я не указал идентификационный файл.

скажем, я вхожу в EC2 вот так:ssh -i my_key.pem username@11.111.11.11

Итак, я могу сделать что-то подобное здесь: git -i my_key.pem push origin master или установите идентификационный файл в .git/config

Итак, как я могу настроить его?

обновление: вывод 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/*

обновление (от @Джон комментарий):

если у вас есть ключ в нечетном пути просто запустите ssh-add /private/key/path. Это сработало для меня.

11 73

11 ответов:

чтобы скопировать ваш локальный ssh ключ в amazon попробуйте это

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

замена имен ключа и Amazon ec2 public dns, конечно.

затем вы сможете настроить свой пульт дистанционного управления на amazon

по указаниям здесь были более полезны для меня.

из ссылки:

настройте свой ~/.ssh/config и добавить:

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

теперь используйте псевдоним хоста ssh в качестве репозитория:

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

и он должен использовать other_id_rsa ключ!

на локальном компьютере отредактируйте~/.ssh / config и добавить:

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

вы должны иметь возможность войти в свой экземпляр с помощью "ssh example". Помните, что ваш закрытый ключ должен быть chmod 400. После того, как вы можете ssh в без использования "ssh-I mykey.PEM username@host", выполните следующие действия.

на вашем экземпляре EC2 инициализируйте голый репозиторий,который используется исключительно для нажатия. Конвенция должна добавить расширение".git " к имени папки. Это может выглядеть иначе, чем ваш локальный репозиторий, который обычно имеет .папка git внутри вашей папки "проект". Голые репозитории (по определению) не имеют рабочего дерева, прикрепленного к ним, поэтому вы не можете легко добавлять к ним файлы, как в обычном не голом репозитории. Это просто они так это делают. На вашем экземпляре ec2:

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

теперь, вернувшись на локальную машину, используйте псевдоним хоста ssh при настройке пульта дистанционного управления.

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

теперь, вы должны быть в состоянии делать:

git push ec2 master

теперь ваш код передается на сервер без проблем. Но проблема на данный момент заключается в том, что ваша папка www на экземпляре ec2 не содержит фактических "рабочих файлов", которые должен выполнить ваш веб-сервер. Итак, вам нужно настроить скрипт "hook", который будет выполняться при нажатии на ec2. Этот скрипт заполнит соответствующую папку на вашем экземпляре ec2 с вашими фактическими файлами проекта.

Итак, на вашем экземпляре ec2 зайдите в свой папка проекта.каталог git/hooks. Затем создайте файл с именем "post-receive" и chmod 775 (он должен быть исполняемым). Затем вставьте этот скрипт:

#!/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

теперь, на вашем локальном компьютере, сделайте "git push ec2 master", и он должен нажать код на ваше голое РЕПО, а затем скрипт post-receive hook проверит ваши файлы в соответствующую папку, которую ваш веб-сервер настроен для чтения.

вам нужно создать и загрузить ключ SSH на экземпляр EC2. Следуйте этому руководству:http://alestic.com/2010/10/ec2-ssh-keys

  1. выполнить ssh-keygenлокально
  2. в своем local~/.ssh/ каталог теперь вы должны увидеть публичный ключ под названием id_rsa.pub - скопируйте содержимое этого файла в /etc/ssh/authorized_keys файл, который находится на вашем удаленный сервер.

вы можете либо скопировать и вставить содержимое, или загрузить файл на удаленный сервер и выполните следующую команду:

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

Я получил доступ запрещен при развертывании через систему управления версиями и не мог понять, почему. Я понял, что мой пользователь, для которого я создавал ssh-ключ (названный ubuntu, также рекомендуемый логин для моего сервера ec2), не был пользователем, который отвечал за развертывание cap (root). Запуск ssh-keygen для root и загрузка этого ключа ssh в качестве ключа развертывания в bitbucket решили мои проблемы.

Я знаю, что слишком поздно для этого, но я просто хотел поделиться этой статьей, которую всего за несколько секунд я успешно нажал на EC2 git repo

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

вот самый простой способ, который отлично работал для меня... У меня возникли проблемы с клонированием репозитория... он не распознал ключ SSH, который я создал... Вместо того, чтобы изменить ваш конфигурационный файл и все такое, я просто скопировал реальный ssh-ключ, с которым он пытался подключиться, и я добавил Это в bitbucket... вот команда:

 sudo vi /root/.ssh/id_rsa.pub

используется VI, чтобы открыть реальный ключ RSA и скопировать содержимое и вставить в bitbucket... Готово!

Я не публикую здесь ничего нового, я думаю, но мне пришлось копаться в приведенных выше ответах, чтобы обратиться к моему конкретному случаю. У меня есть экземпляр Ubuntu на EC2.

чтобы войти в мой экземпляр, мне нужно было сделать:

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

ключевой файл " pemfile.УГР" должно быть в кавычках.

я добавил удаленный:

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

но когда я попытался подтолкнуть:

git push origin master

Я:

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

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

исправить, я сделал:

/<path to pemfile>/pemfile.pem

что дал мне ответ,

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

после чего толчок прошел нормально.

я обнаружил, что это был самый быстрый способ:https://gist.github.com/matthewoden/b29353e266c554e04be8ea2058bcc2a0

по сути:

ssh-add /path/to/keypair.pem ("- add " должен быть сразу после ssh)

проверьте, работает ли он:ssh ubuntu@crazylongAWSIP (возможно, ваше имя пользователя не ubuntu)

после этого вы можете настроить РЕПО git на своем ec2 и нажать на него:

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

вы можете настроить "голый" git РЕПО на вашем ec2 (который означает, что другие репозитории git могут вытащить из него и нажать на него, но он не будет содержать никаких файлов), или вы можете настроить обычное РЕПО и нажать на него напрямую (мое предпочтение, если вы хотите нажать локальные изменения в свой ec2 без необходимости постоянно ssh в свой ec2).

если вы хотите настроить обычное РЕПО на ec2, ssh в ec2, сделайте git init где вы хотите, а затем сделать это:

git config receive.denyCurrentBranch updateInstead

посмотреть: не удается вставить в репозиторий git для объяснения "recieve deny текущая ветка"

для всех, кто может быть заинтересован, это решение оказалось самым чистым и простым для меня:

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