Как подтолкнуть к 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 ответов:
чтобы скопировать ваш локальный 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
- выполнить
ssh-keygen
локально- в своем 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/