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

И сделано. Это сработало!

Другие вопросы по тегам