На этот вопрос уже есть ответ здесь :
Я хочу клонировать репо неинтерактивным способом. При клонировании 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).
Я не думаю, что это лучшее решение, но это было решение для меня.
ОТВЕТ:
Добавление доменных имен в файл known_hosts
с помощью команды ssh-keyscan
проблема решена:
ssh-keyscan
Хотя я, конечно, понимаю, что вы хотите автоматизировать такой процесс, делать это было бы плохо- посоветовал. Причина, по которой SSH и связанные с ним сетевые подкомпоненты не работают при использовании безопасного протокола, состоит в том, чтобы ПРЕДУПРЕЖДЕНИЕ человека о том, что открытый ключ системы неизвестен. Это сделано намеренно - пользователь должен явно сообщить системе, какой хост ожидается. Вы не захотите автоматически принимать каждый предоставленный вам открытый ключ или часть безопасности в SSH или TLS / SSL может быть скомпрометирована. Одним из примеров является атака «злоумышленник в середине», например, когда программа-прокси представляет свой собственный ключ вместо ожидаемого хоста.
Действуйте с осторожностью.
Если вы не боитесь источника кода по сети,
Как сказал Джефф Холл, делать это опасно, поскольку это позволяет незамеченным атакам типа «злоумышленник в середине». Однако вы можете использовать параметр StrictHostKeyChecking no
в ssh, чтобы отключить проверку ключей хоста. Однако на вашем месте я был бы очень осторожен с этим вариантом.
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_hosts
in 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.
Добавление ключа в .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
Ни опции "StrictHostKeyChecking no", ни "ssh-keyscan" не являются безопасными. Вам в какой-то момент потребуется ручная проверка отпечатков пальцев, чтобы избежать MiTM-атаки, если вы придерживаетесь ssh.
На самом деле, у вас есть 2 опции:
Он не будет запрашивать отпечатки пальцев, потому что ssh не задействован, вместо него используется https. С точки зрения безопасности вы доверяете установке корневых сертификатов на свою ОС. Если вы используете минималистский образ или Docker, вам может понадобиться установить пакет ca-certificates.
Нужно ли добавлять ключ во время выполнения? Это небезопасно, потому что вы не проверили отпечатки пальцев, и это оставляет вас открытым для 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 изменится только в том случае, если они поверят, что он был скомпрометирован (или недостаточно безопасен). Если это когда-нибудь произойдёт, вы хотите, чтобы ваш скрипт всё равно провалился.
.