Ответь да в скрипте bash

24

Я пытаюсь выполнить git cloneсценарий bash, но при первом запуске сценария сервер не известен, но сценарий завершается ошибкой. У меня есть что-то вроде этого:

yes | git clone git@github.com:repo/repoo.git
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? 

Но это игнорирование yes. Знаете ли вы, как заставить git cloneдобавить ключ к известным хостам?

Рафаэль
источник
Как насчет echo yes | git clone git@github.com:repo/repoo.git?
asfallows
3
@asfallows, afRafael: echo yesне очень хороший подход: при втором запуске команды ssh не спросит, хотите ли вы продолжить, потому что ключ сервера уже известен.
Жиль "ТАК - перестань быть злым"

Ответы:

21

Добавьте следующее в ваш ~/.ssh/configфайл:

Host github.com
    StrictHostKeyChecking no

Все, что использует клиент open-ssh для установки удаленной оболочки (как это делает клиент git), должно пропустить проверку ключей на github.com.

На самом деле это плохая идея, поскольку любая форма пропуска чеков (независимо от того, нажимаете ли вы автоматически «да» или пропускаете чек в первую очередь), создает место для человека, находящегося под угрозой среднего уровня безопасности. Лучшим способом было бы извлечь и проверить отпечаток пальца и сохранить его в known_hostsфайле, прежде чем запускать скрипт, который автоматически подключается.

Калеб
источник
2
С сильным предпочтением получить и проверить отпечаток пальца и сохранить его в known_hostsфайле ранее .
Жиль "ТАК - перестань быть злым"
1
Большое спасибо за ваш ответ, в итоге я следовал подходу добавления отпечатка пальца в known_hosts. Это как более безопасно :)
Рафаэль
О, я использую куклу, чтобы сделать это. Если кто-то заинтересован в его использовании, вот рецепт: gist.github.com/1155725
Рафаэль
5

yesвыходы y. Потребность в принятии ключа RSA yes. Вы могли бы попробовать yes yes | git clone git@github.com:repo/repoo.gitтак yesвыводы yesвместо y.

jfg956
источник
5
По некоторым причинам, это не сработало с git clone, для меня.
Мэтт В.
Ни у меня это не сработало. Также echo "yes" | ...нет. Я думаю, gitчто не принимает трубопровод. Может быть, только в какой-то версии?
Удондан
3

Запуск ssh-keyscan -H github.com >> ~/.ssh/known_hostsдо клонирования добавит ключ и предотвратит появление приглашения.

Конечно, этот подход также уязвим для атаки MITM.

Кевин Смит
источник
1

Я сталкивался с этой проблемой раньше. Хотя это было на компьютере с Windows, но нам нужно было использовать ssh для подключения к удаленному хосту. Мы столкнулись с той же проблемой, что первое соединение всегда не удавалось, потому что оно не распознало ключи.

Я решил это, подключившись вручную, найдя ключ реестра и импортировав его в начале скрипта. В Linux это должна быть та же самая общая идея: вы хотите добавить этот сервер в список доверенных хостов, чтобы ssh не спрашивал вас, доверяете ли вы ему каждый раз.

Как только вы подключитесь вручную, найдите файл ключа и добавьте его в свой файл known_hosts. Таким образом, ssh будет просматривать этот файл, предполагая, что вы знаете, что делаете, и продолжайте, не спрашивая вас об отпечатке пальца.

n0pe
источник