Как нажать на 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 решили мои проблемы.
Ответ 7
Я знаю, что я слишком поздно для этого, но я просто хотел поделиться этой статьей, которая за несколько секунд я успешно нажал на EC2 git repo
http://shirtdev.wordpress.com/2011/05/04/setting-up-a-git-repository-on-an-amazon-ec2-instance/
Ответ 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 для объяснения "получения отказа в текущей ветке"
Ответ 11
Для всех, кто может быть заинтересован, это решение оказалось самым чистым и легким для меня:
http://eric.sau.pe/accessing-a-git-repository-using-a-key-pair/