Как нажать на мерзавца на EC2 - PullRequest
75 голосов
/ 08 января 2011

Я пытаюсь следовать этой инструкции. У меня есть локальное 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/*

Обновление (от @ Jon's комментарий ):

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

Ответы [ 11 ]

47 голосов
/ 13 апреля 2011

Чтобы скопировать локальный ключ 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

27 голосов
/ 31 декабря 2011

Инструкции, перечисленные здесь , были для меня более полезны.

Из ссылки:

Настройте ~/.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 ключ!

19 голосов
/ 09 марта 2014

На вашем локальном компьютере отредактируйте ~ / .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 внутри вашей папки «project». У обнаженных репозиториев (по определению) нет прикрепленного к ним рабочего дерева, поэтому вы не можете легко добавлять к ним файлы, как это было бы в обычном непокрытом хранилище. Это просто так, как это делается. На вашем экземпляре 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 перейдите в каталог project_folder.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», и он должен отправить код в ваше пустое хранилище, а затем сценарий ловушки после получения извлечет ваши файлы в соответствующую папку, настроенную вашим веб-сервером. читать.

5 голосов
/ 08 января 2011

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

2 голосов
/ 20 октября 2017

Я нашел, что это был самый быстрый способ: 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-репозитории могут извлекать из него и подталкивать к нему, но он не будет содержать файлы), или вы можете настроить NORMAL Сделайте репо и нажмите на него напрямую (я предпочитаю, если вы хотите помещать локальные изменения в ваш ec2 без необходимости постоянного входа в ваш ec2).

Если вы хотите установить НОРМАЛЬНОЕ РЕПО на ec2, зайдите в ec2, сделайте git init где хотите, а затем сделайте следующее:

git config receive.denyCurrentBranch updateInstead

См .: не может запихнуть в git-репозиторий для объяснения "получить отказавшую текущую ветку"

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

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

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

1 голос
/ 18 августа 2017

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

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

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

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

Я добавил пульт:

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 )

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

0 голосов
/ 27 марта 2015

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

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

0 голосов
/ 01 декабря 2013

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

 sudo vi /root/.ssh/id_rsa.pub

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

0 голосов
/ 29 августа 2013

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...