2011-01-08 3 views
69

Я стараюсь следовать инструкциям this. У меня есть локальный репозиторий git, и когда я делаю git push, мне нужно, чтобы репо было нажато на мой экземпляр EC2.Как нажать на 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/* 

Update (от @comment Джона):

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

+14

' ssh-add/private/key/path' работал! – zengr

+1

Когда вы говорите, что это сработало, можете ли вы добавить инструкции относительно того, что вы на самом деле делали шаг за шагом? – designermonkey

+0

@Designermonkey Обновлено. – zengr

ответ

41

Чтобы скопировать локальный ключ SSH к амазонке попробовать этот

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

заменяя имена ключа и Amazon EC2 Public DNS, конечно.

вы затем сможете настроить свой пульт на Амазонке

+3

Я последовал этому, но вместо ключа dsa использовал ключ rsa. Кроме того, я добавил пробел между cat и >>, например: «cat >> .ssh/authorized_keys» – cmcculloh

+0

Я сделал это, но ошибка осталась. –

+2

это не отвечает на вопрос о том, как мы определяем ключ при выполнении команды git push – psvj

4

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

+2

, но у меня уже есть ключ для пары ключ-значение со мной, который я использовал для входа в EC2. – zengr

+0

Попробуйте некоторые из решений в этой теме: http://serverfault.com/questions/39733/why-do-i-get-permission-denied-publickey-when-trying-to-ssh-from-local-ubuntu – Jon

+2

Я понимаю эту часть, но это проблема конфигурации Git. – zengr

24

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

Из ссылке:

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

+2

. Я также нашел полезным, что для git remote add ec2 ssh: //[email protected]: zivot'. Я не знал, что до этого можно было бы префиксные адреса с помощью 'ssh: //'. – isomorphismes

+0

Отличный ответ, надеялся воспользоваться конфигурацией ssh, которую я уже использую. –

+0

Awesome. Это лучше, чем выяснение полного URL-адреса. –

2
  1. Run ssh-keygenлокально
  2. В вашем локального каталога~/.ssh/ теперь вы должны увидеть открытого ключ файла с именем id_rsa.pub - скопировать ОГЛАВЛЕНИЕ этого файла в /etc/ssh/authorized_keys файл, который находится на вашем удаленный сервер.

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

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

+1

Являются ли шаги 2 и 3 одинаковыми? – JoeTidee

+0

Нет, @JoeTidee - шаг 2 получает ключ на удаленном сервере, а шаг 3 добавляет его в нужное место. :) – Alastair

+0

Намного лучше, спасибо, @JoeTidee :) – Alastair

0

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

0

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

sudo vi /root/.ssh/id_rsa.pub 

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

18

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

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», который будет выполняться при нажатии на 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 

Теперь на локальном компьютере, сделать «мастер EC2 мерзавец толчок», и он должен нажать код на голой репо, а затем после получать крюк скрипт проверки ваши файлы в соответствующую папку, которую ваш веб-сервер настроен для чтения.

+1

это работает для меня. chmods очень важны. @devdrc вам, возможно, потребуется отредактировать его дальше и сделать указания командной строки подчеркнутыми. –

+0

часть скрипта bash отлично работала, но скрипт bash не работал для меня. Этот ответ http://stackoverflow.com/a/24027870/847954 отлично работал для меня. Спасибо devdrc за этот пост и @blamb за публикацию скрипта. –

+0

@jeffmusk вам нужно убедиться, что файл 'post-receive' является исполняемым –

0

Я ничего нового здесь не вывешивать, я думаю, но я должен был вырыть через приведенные выше ответы для рассмотрения моего конкретного случая. У меня есть экземпляр 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) 

После чего толкающий прошел отлично.

+0

Я не понимаю, когда вы говорите:« Чтобы исправить это:/path to pemfile/», мой pemfile.pem ничего не выполняет ... . какую команду вы используете для добавления идентификатора? – rikkitikkitumbo

0

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

В основном:

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

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

После этого вы можете настроить 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 репо на EC2, SSH в к ec2, сделать git init, где вы хотите, а затем сделать это:

git config receive.denyCurrentBranch updateInstead 

См: cannot push into git repository для объяснения «ПОЛУЧИТЕ deny current branch "

Смежные вопросы