Git Clone Failure
У меня есть Amazon AMI на основе Linux, в котором находится Git-репозиторий. я бы хотел git clone
этот репозиторий для моей локальной OSX-машины (на которой также установлен Git).
Репозиторий находится на коробке Amazon в /home/ec2-user/my_test_repo
, Внутри my_test_repo
каталог является .git
каталог.
На моей машине OSX я могу успешно SSH к машине, на которой размещен репозиторий, как ec2-user
и я могу выполнить много команд bash. Итак, я знаю, что SSH работает. Однако следующая команда не работает, когда я выполняю ее со своего компьютера с OSX:
git clone ssh://ec2-user@ec2-54-81-229-189.compute-1.amazonaws.com/home/ec2-user/my_test_repo.git
Я получаю следующее сообщение об ошибке:
Cloning into 'my_test_repo'...
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Есть идеи, что я здесь делаю не так?
2 ответа
Первая проблема заключается в том, что вы не можете войти на сервер:
Cloning into 'my_test_repo'... Permission denied (publickey,gssapi-keyex,gssapi-with-mic). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
Вы должны заставить эту команду работать сначала:
ssh ec2-user@ec2-54-81-229-189.compute-1.amazonaws.com
Эта проблема не имеет ничего общего с Git, вам нужно получить ssh
работа с открытым ключом аутентификации.
Вторая проблема заключается в том, что путь к вашему хранилищу, вероятно, неправильный. Если ваш репозиторий на сервере находится в .git
каталог внутри /home/ec2-user/my_test_repo
тогда URL будет:
git clone ssh://ec2-user@ec2-54-81-229-189.compute-1.amazonaws.com/home/ec2-user/my_test_repo/.git
Обратите внимание, что конечная часть my_test_repo/.git
потому что он должен соответствовать пути файловой системы к каталогу, содержащему Git-репозиторий. Git-репозиторий содержит такие файлы, как HEAD
, config
и каталоги, как objects
, refs
, hooks
и некоторые другие.
Таким образом, это выглядит как my_test_repo
это так называемое рабочее дерево. Если вы клонируете из my_test_repo/.git
вы не сможете нажать на него, потому что git не позволяет отправлять в репозитории с рабочим деревом. Это позволяет только отправлять файлы в так называемое хранилище без рабочего дерева. Вы можете создать пустой репозиторий из вашего существующего не пустого репозитория с помощью этих команд:
git clone --bare my_test_repo my_test_repo.git
После того, как вы это сделаете, ваш исходный URL должен работать, потому что теперь путь к репозиторию Git действительно my_test_repo.git
, вместо my_test_repo/.git
, Вам не нужно my_test_repo
Рабочее дерево больше, вы можете удалить его.
Наконец, вы можете упростить URL хранилища следующим образом:
git clone ec2-user@ec2-54-81-229-189.compute-1.amazonaws.com:my_test_repo.git
Я, наконец, получил это с большой помощью @janos (см. Его комментарии выше).
Во-первых, вам нужно, чтобы ssh работал с аутентификацией с открытым ключом. Это не имеет ничего общего с Git.
В терминале на клиентском компьютере OSX я ввел следующую команду: ssh-keygen -t dsa
, который генерирует ключи SSH на моей локальной машине OSX. Для каждого из запросов вы можете ввести фактические значения или просто нажать клавишу ВВОД (ввод значений позволяет настроить и сделать процесс SSH более безопасным). Я просто нажал ENTER.
Затем я скопировал недавно сгенерированный файл ~/.ssh/id_rsa.pub (убедитесь на 100%, что это файл с расширением.pub в конце) на удаленный сервер Amazon EC2. Тем не менее, я обнаружил, что этот процесс немного отличается от того, как объясняет большинство онлайн-уроков (я думаю, из-за несколько уникального использования файлов.pem для экземпляров EC2).
В терминале на машине OSX я cd
в каталог, содержащий мой файл.pem, а затем я ввел следующую команду: scp -i JPo.pem ~/.ssh/id_rsa.pub ec2-user@ec2-54-81-229-189.compute-1.amazonaws.com:.ssh/authorized_keys
На этом этапе ssh с аутентификацией с открытым ключом теперь должен работать между клиентским компьютером OSX и удаленным экземпляром Amazon EC2.
А теперь приходит Git, который довольно простой. Я ввел следующую команду: git clone ssh://ec2-user@ec2-54-81-229-189.compute-1.amazonaws.com/home/ec2-user/my_test_repo/.git
И сделано. Это сработало!