2016-08-01 2 views
1

Я хочу клонировать открытый публичный репо в другой каталог. Для этого в командной строке набираю:Почему я могу клонировать из командной строки, но не скрипт bash?

git clone [email protected]:computersarecool/dotfiles.git documents/gitprojects/dotfiles

, который работает.

Однако, теперь я хочу сделать это из сценария bash. В сценарии у меня буквально тот же код:

#!/bin/bash 
git clone [email protected]:computersarecool/dotfiles.git documents/gitprojects/dotfiles 

но теперь я получаю сообщение об ошибке:

Permission denied (publickey).            
fatal: Could not read from remote repository. 
Please make sure you have the correct access rights and the repository exists. 

Может кто-нибудь объяснить этот вопрос для меня? Я даже не понимаю, почему он просит публики в первую очередь, поскольку репо открыто.

+0

Вы делаете это с помощью 'sudo' или другого пользователя или из' cron' или somesuch? –

+0

Я запускаю сценарий bash как 'sudo'! Есть ли способ объяснить это? – Startec

+0

'git clone [email protected]: ...' подключается через SSH.Он должен аутентифицироваться на удаленном SSH-демоне ** до **, он может говорить со всем, что связано с git-спецификой, поэтому проверка подлинности репо или нет полностью не имеет значения: он не завершил переговоры и аутентификацию транспортного уровня в точке когда это не удается, так есть ли какой-либо вид контроля доступа на прикладном уровне или не является спорным. –

ответ

1

Если это действительно публичное открытое репо, использовать протокол HTTPS вместо SSH:

#!/bin/bash 
git clone https://github.com/computersarecool/dotfiles.git documents/gitprojects/dotfiles 

Если вы хотите придерживаться SSH, вы должны позволить SSH-агент знает о вашем ключе id_rsa:

#!/bin/bash 
eval `ssh-agent -s` 
ssh-add /home/<Your username>/.ssh/id_rsa 
git clone [email protected]:computersarecool/dotfiles.git documents/gitprojects/dotfiles 

Добавить свое имя пользователя (и проверьте содержимое каталога ~/.ssh, чтобы убедиться, что ваш секретный ключ называется id_rsa)

+1

Вы все еще используете 'https: //' во втором фрагменте, что делает ключ установки SSH довольно спорный вопрос. –

+0

спасибо @charlesDuffy! fixed – sestus

0

вы упоминаете в комментариях, что вы запускаете скрипт Баш как Судо.

Я собираюсь предположить, что вы клонировали в командной строке без sudo.

Сообщение об ошибке Permission denied (publickey). в основном говорит о том, что пользователь, пытающийся клонировать, не имеет правильного открытого ключа ssh. Это связано с тем, что КАЖДЫЙ И КАЖДЫЙ ПОЛЬЗОВАТЕЛЬ в системе unix обычно имеют свой собственный открытый ключ ssh. Предположительно, ваш пользователь настроен для аутентификации с помощью github с использованием вашего открытого ключа. Но sudo работает как пользователь root. Если вы не настроили открытый ключ root, который будет использоваться с учетной записью github (либо собственной учетной записи github root, либо вашей), это приведет к сбою аутентификации.

Вы в основном есть 2 решения для этого:

  1. Скопируйте свой открытый ключ .ssh каталог суперпользователя. Это не рекомендуется! Но для одной пользовательской машины, такой как ваш собственный ноутбук, риск безопасности при этом минимален.

  2. Создать открытый ключ для root и зарегистрировать его с помощью github.

Альтернативно клонировать с использованием протокола HTTPS вместо SSH (толкание будет боль, хотя, как это потребует от вас ввести свой пароль каждый раз).

Еще одна альтернатива - клонировать как вы сами, а не корень.

+0

Вы упоминаете здесь «открытый ключ», но я предполагаю, что пользователю root нужен открытый и закрытый ключ? – Startec

+0

Да, так работает ключевая пара. Но никогда не открывайте секретный ключ кому-либо еще. – slebetman

+0

... re: «толкание будет болью» - нет никакого обязательства проталкивать через тот же URL-адрес, который был клонирован. –

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