Ответ 1
сначала попробуйте выполнить эту команду:
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no github.com
а затем git pull
снова.
У меня есть публичное репо, https://github.com/rlpowell/config. Раньше я мог запускать git pull без каких-либо ssh-ключей (т.е. От cron), и он работает нормально, используя URL-адрес git @github.com: rlpowell/config.git(т.е. URL SSH). Это больше не работает, и я понятия не имею, почему, но он работает для двух моих друзей.
Я хотел бы иметь возможность git вытащить публичное репо без ключа ssh или, по крайней мере, понять, почему он не работает для меня и делает для других людей.
Здесь друг пытается мой тестовый пример:
$ git clone [email protected]:rlpowell/config.git ; cd config ; (unset SSH_AUTH_SOCK ; ssh-add -l ; git pull )
Cloning into 'config'...
Warning: Permanently added the RSA host key for IP address '192.30.253.113' to the list of known hosts.
remote: Counting objects: 1061, done.
remote: Total 1061 (delta 0), reused 0 (delta 0), pack-reused 1061
Receiving objects: 100% (1061/1061), 544.42 KiB | 495.00 KiB/s, done.
Resolving deltas: 100% (632/632), done.
Checking connectivity... done.
Could not open a connection to your authentication agent.
Already up-to-date.
И здесь я делаю то же самое:
$ git clone [email protected]:rlpowell/config.git ; cd config ; (unset SSH_AUTH_SOCK ; ssh-add -l ; git pull )
Cloning into 'config'...
remote: Counting objects: 1061, done.
remote: Total 1061 (delta 0), reused 0 (delta 0), pack-reused 1061
Receiving objects: 100% (1061/1061), 544.42 KiB | 0 bytes/s, done.
Resolving deltas: 100% (632/632), done.
Checking connectivity... done.
Could not open a connection to your authentication agent.
Enter passphrase for key '/home/rlpowell/.ssh/id_rsa':
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
(я нажимаю enter в командной строке ssh key).
В репо,.git/config:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = [email protected]:rlpowell/config.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
И git config -l:
$ git config -l
[email protected]
user.name=Robin Lee Powell
push.default=matching
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
[email protected]:rlpowell/config.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
git версия 2.5.5
strace говорит, что вещь, на самом деле работающая ssh,
ssh [email protected] git-upload-pack 'rlpowell/config.git'
сначала попробуйте выполнить эту команду:
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no github.com
а затем git pull
снова.
Я просто попробовал это без ключа, и я подтверждаю, что он не может работать (без ключа SSH):
$ git clone [email protected]:rlpowell/config.git
Cloning into 'config'...
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Это связано с тем, что GitHub не разрешает анонимный доступ через SSH (в отличие от https), как решили другие ресо-серверы git (like Гогиты или go-gitea)
GitHub упоминает:
URL-адреса SSH предоставляют доступ к репозиторию git через SSH, безопасный протокол.
Чтобы использовать эти URL-адреса, должен создать на вашем компьютере пару ключей SSH и добавить открытый ключ в свою учетную запись GitHub.
(акцент должен быть)
Почему? (спросил в 2015 году). В то время как sshd можно настроить для анонимного доступа, ни один публичный сайт никогда не подумает об этом: слишком большой риск для безопасности.
должен работать без определенного ключа
Если вам нужен анонимный доступ, вы можете использовать:
git://github.com/<user>/<repo>
, хотя он использует порт 9418, который часто блокируется в корпоративной среде.Кажется, что проблема связана с ключами ssh, по крайней мере, ответ:
Enter passphrase for key '/home/rlpowell/.ssh/id_rsa':
Permission denied (publickey).
Итак, вам нужно добавить свой открытый ключ в github
Добавление нового ключа SSH в вашу учетную запись GitHub
Также вы можете запустить:
ssh -T [email protected]
для проверки подключения ssh к github
Это публичное репозиторинг GitHub, и вы просто хотите извлечь его из него, поэтому вместо этого вы можете использовать URL-адрес HTTPS:
https://github.com/rlpowell/config.git
Вы выдаете сертификат. простое решение - просто создать новый и заменить старый.
Проблема может быть вызвана несколькими проблемами, например: неправильная запись файла хоста, вызывается сертификат ssh и т.д.
поэтому лучше всего создать новый сертификат и протестировать его.
Просто следуйте этим шагам, и вы быстро установите свой ssh-ключ:
Создайте новый ключ ssh (или пропустите этот шаг, если у вас уже есть ключ) ssh-keygen -t rsa -C "[email protected]"
После того, как ваш ключ установлен в каталог home/.ssh
(или Users/<your user>.ssh
под окнами), откройте его и скопируйте контент
SSH keys
Add ssh key
И вы все решили: -)
Для публичного репо вам не нужен пароль. Вы можете напрямую клонировать, используя ссылку https:
eg git clone https://github.com/rlpowell/config.git
Вы не можете подключиться к SSH-серверу без проверки подлинности.
Таким образом, невозможно клонировать или вытаскивать SSH без зарегистрированного ключа SSH.
У вас есть два варианта:
Я думаю, вы не можете сделать это с помощью SSH. Вот хорошее объяснение:
Если вы хотите клонировать и вытаскивать материал без использования ключа, используйте HTTP (S).
Итак,
git clone http://github.com/rlpowell/config.git
Klone nach 'config' ...
warning: Leite nach https://github.com/rlpowell/config.git/ um
remote: Counting objects: 1234, done.
remote: Total 1234 (delta 0), reused 0 (delta 0), pack-reused 1234
Empfange Objekte: 100% (1234/1234), 2.01 MiB | 1.07 MiB/s, Fertig.
Löse Unterschiede auf: 100% (758/758), Fertig.
".git/config" будет выглядеть так:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = http://github.com/rlpowell/config.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
Вы можете впоследствии изменить этот файл, если вы уже клонировали или используете git config
С этими настройками вы можете git pull
в любое время.
Почему использование URL-адреса [email protected]:rlpowell/config.git
не работает по следующей причине:
Запись [email protected]:rlpowell
заставит вас пройти аутентификацию с помощью SSH. Github требует, чтобы вы использовали ключевые пары, если хотите аутентификацию SSH.
Если вы хотите иметь автоматического пользователя cronjob и по-прежнему использовать SSH, создайте в качестве этого пользователя пару ключей и загрузите общедоступный файл в gitlab.
Но если вы хотите клонировать и тянуть, HTTPS будет более чем достаточно. Кстати, возможна аутентификация через HTTPS. Github запрашивает ваше имя пользователя и пароль, если вы пытаетесь нажать изменения. Это, конечно, не рекомендуется, если вы используете cronjobs.