Не интерактивный git clone (запрос отпечатка ssh) [duplicate]

На этот вопрос уже есть ответ здесь :

Я хочу клонировать репо неинтерактивным способом. При клонировании git запрашивает подтверждение отпечатка пальца хоста:

The authenticity of host 'bitbucket.org (207.223.240.182)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)? no

Как заставить «да» каждый раз, когда появляется этот вопрос? Я пробовал использовать да да | git clone ... , но это не работает.

РЕДАКТИРОВАТЬ: Вот решение: Могу ли я автоматически добавлять новый хост в known_hosts? (добавляет входы в known_hosts с помощью ssh-keyscan).

135
задан 13 April 2017 в 15:14
6 ответов

Я не думаю, что это лучшее решение, но это было решение для меня.

ОТВЕТ:

Добавление доменных имен в файл known_hosts с помощью команды ssh-keyscan проблема решена:

ssh-keyscan >> ~ / .ssh / known_hosts

108
ответ дан 28 November 2019 в 19:18

Хотя я, конечно, понимаю, что вы хотите автоматизировать такой процесс, делать это было бы плохо- посоветовал. Причина, по которой SSH и связанные с ним сетевые подкомпоненты не работают при использовании безопасного протокола, состоит в том, чтобы ПРЕДУПРЕЖДЕНИЕ человека о том, что открытый ключ системы неизвестен. Это сделано намеренно - пользователь должен явно сообщить системе, какой хост ожидается. Вы не захотите автоматически принимать каждый предоставленный вам открытый ключ или часть безопасности в SSH или TLS / SSL может быть скомпрометирована. Одним из примеров является атака «злоумышленник в середине», например, когда программа-прокси представляет свой собственный ключ вместо ожидаемого хоста.

Действуйте с осторожностью.

Если вы не боитесь источника кода по сети,

7
ответ дан 28 November 2019 в 19:18

Как сказал Джефф Холл, делать это опасно, поскольку это позволяет незамеченным атакам типа «злоумышленник в середине». Однако вы можете использовать параметр StrictHostKeyChecking no в ssh, чтобы отключить проверку ключей хоста. Однако на вашем месте я был бы очень осторожен с этим вариантом.

6
ответ дан 28 November 2019 в 19:18

I believe a better option here is to back up and empty your ~/.ssh/known_hosts file, manually perform the SSH connection, verifying the IP address and fingerprint, mv ~/.ssh/known_hosts ~/bitbucket_hosts, then use the contents of ~/bitbucket_hostsin your script to automatically append the known fingerprints to the known_hosts file (don't forget to restore the original ~/.ssh/known_hosts).

This step only needs to be performed once (on any machine, I believe), and once you have the fingerprints, you can incorporate it in to your automation script.

9
ответ дан 28 November 2019 в 19:18

Добавление ключа в .ssh / known_hosts кажется правильным.

Хотя, когда вы автоматизируете задачу, вы хотите убедиться, что ключ еще не содержится и не добавлен на каждом clone / pull задачи.

Этот фрагмент добавит отпечаток пальца, только если он еще не найден:

if [ ! -n "$(grep "^bitbucket.org " ~/.ssh/known_hosts)" ]; then ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts 2>/dev/null; fi
7
ответ дан 28 November 2019 в 19:18

Ни опции "StrictHostKeyChecking no", ни "ssh-keyscan" не являются безопасными. Вам в какой-то момент потребуется ручная проверка отпечатков пальцев, чтобы избежать MiTM-атаки, если вы придерживаетесь ssh.

На самом деле, у вас есть 2 опции:

Использовать протокол https вместо git

Он не будет запрашивать отпечатки пальцев, потому что ssh не задействован, вместо него используется https. С точки зрения безопасности вы доверяете установке корневых сертификатов на свою ОС. Если вы используете минималистский образ или Docker, вам может понадобиться установить пакет ca-certificates.

Если вам действительно нужен git+ssh протокол

Нужно ли добавлять ключ во время выполнения? Это небезопасно, потому что вы не проверили отпечатки пальцев, и это оставляет вас открытым для MiTM-атак. Это не только теоретически, и это было доказано.

Прежде чем запустить ваш скрипт, получите ключ от github (на вашей локальной машине):

ssh-keyscan github.com >> githubKey

Сгенерируйте отпечаток:

ssh-keygen -lf githubKey

И проверьте его вручную против перечисленных на этой странице (хорошо, там вы доверяете https-сертификатам и OpenSSL, чтобы принести вам оригинальный сайт github, но это все равно намного лучше, чем слепое принятие открытого ключа).

Затем вы жестко закодируете его в своем скрипте, добавив в него:

echo '<copy paste the content of 'cat githubKey' on your machine>'  >> ~/.ssh/known_hosts

до клонирования git'а.

Открытый ключ GitHub изменится только в том случае, если они поверят, что он был скомпрометирован (или недостаточно безопасен). Если это когда-нибудь произойдёт, вы хотите, чтобы ваш скрипт всё равно провалился.

.
108
ответ дан 28 November 2019 в 19:18

Теги

Похожие вопросы