Как нажать на git на EC2

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

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

Скажем, я вхожу в EC2 следующим образом: ssh -i my_key.pem [email protected]

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

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

Обновление: вывод 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
[email protected]_e2_ip_address:express_app
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*

Обновление (от @Jon comment):

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

Ответ 1

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

cat ~/.ssh/id_?sa.pub | ssh -i amazon-generated-key.pem [email protected] "cat >> .ssh/authorized_keys"

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

вы сможете настроить пульт на amazon

Ответ 2

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

Из ссылки:

Отрегулируйте ~/.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!

Ответ 3

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

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

Вы можете войти в свой экземпляр с помощью "примера ssh". Помните, что ваш закрытый ключ должен быть 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" script, который будет выполняться при нажатии на ec2. Этот script заполнит соответствующую папку вашего экземпляра ec2 вашими фактическими файлами проекта.

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

#!/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 script проверит ваши файлы в соответствующей папке, которая ваш веб-сервер настроен на чтение.

Ответ 4

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

Ответ 5

  • Запустить ssh-keygen локально
  • В вашем локальном ~/.ssh/ каталоге вы должны увидеть файл открытого ключа с именем id_rsa.pub - скопируйте содержимое этого файла в файл /etc/ssh/authorized_keys который расположен на вашем удаленном сервере.

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

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

Ответ 6

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

Ответ 8

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

 sudo vi /root/.ssh/id_rsa.pub

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

Ответ 9

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

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

ssh -i "pemfile.pem" [email protected]

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

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

remote add origin [email protected]/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 )

После чего толчок прошел через штраф.

Ответ 10

Я нашел, что это было самым быстрым способом: https://gist.github.com/matthewoden/b29353e266c554e04be8ea2058bcc2a0

В принципе:

ssh-add /path/to/keypair.pem ( "-add" должно быть ПРАВИЛЬНО после команды ssh)

проверьте, работает ли он: ssh [email protected] (возможно, ваше имя пользователя не является ubuntu)

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

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

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

Если вы хотите настроить NORMAL repo на ec2, ssh in в ec2, сделайте git init, где хотите, а затем выполните следующее:

git config receive.denyCurrentBranch updateInstead

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