سؤال Non glic clone (ssh fingerprint prompt) [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

كيف أجبر "نعم" في كل مرة تظهر هذه الأسئلة؟ حاولت استخدام yes yes | git clone ...لكنها لا تعمل.

تصحيح: وإليك الحل: هل يمكنني إضافة مضيف جديد تلقائيًا إلى known_hosts؟ (يضيف enters إلى known_hosts مع ssh-keyscan).


108
2017-11-09 09:04


الأصل


من المثير للاهتمام أن نرى أنه حتى بعد عامين ليس لهذا السؤال إجابة صحيحة. هناك عدد قليل من الحالات الأخرى التي ستطالب فيها git ، على سبيل المثال إذا حاولت استنساخها عبر http وكان الخادم يطلب basic_auth. كيف نفعل ذلك في وضع غير التفاعل؟ - sorin
مضيفا -q الخيار (هادئ) فعل ذلك بالنسبة لي. الآن أنا تمسك أتمتة عبارة المرور.


الأجوبة:


لا أعتقد أن هذا هو الحل الأفضل ، لكنه كان حلاً لي.

إجابة:

إضافة أسماء النطاقات إلى known_hosts الملف باستخدام ssh-keyscan الأمر حل المشكلة:

ssh-keyscan <enter_domainname_e.g._github.com> >> ~/.ssh/known_hosts


92
2017-11-02 04:13



من فضلك لا تفعل هذا الطريق. هذا ليس آمنًا تمامًا: بصمات الأصابع ليست هنا لإزعاجك ولكن للتأكد من أنك لا تواجه هجوم رجل في الوسط. يرجى الاطلاع على إجابتي أدناه. - autra
كما قلت ، "لا أعتقد أن هذا هو الحل الأفضل ، بل كان حلا لي." لأنني كنت في عجلة ، بالتأكيد هناك "الطريقة الصحيحة الشرطية" للقيام بذلك ((: - kroe
إنها ليست مسألة سياسية صحيحة: -) إنها مسألة ما إذا كانت آمنة أم لا. الحل الخاص بك هو آمن إذا وفقط إذا تحقق يدويًا من بصمة الإصبع بعد ssh-keyscan وقبل إضافته إلى .ssh/known_hosts أن تكون هي نفسها التي نشرها github واحد على موقعه على الانترنت. يمكنك القيام بذلك بعدة طرق ، و لي هو واحد منهم. يمكنك أيضًا إجراء فحص متساوٍ في النص البرمجي ، ولكن في النهاية يأتي كل ذلك: تحتاج إلى النص البرمجي لمعرفة البصمة التي تتوقعها ، وتحتاج إلى أن تفشل إذا لم تستقبل الرسالة الصحيحة. - autra
لإضافة مفتاح فقط إذا لم يكن موجودًا ssh-keygen -F github.com || ssh-keyscan github.com >>~/.ssh/known_hosts - transang
يجب أن يكون تنفيذ ذلك مرة واحدة كجزء من إدارة التهيئة أو إدارة الحسابات جيدًا. إذا تغيرت بصمة أصابعك في المستقبل ، فستعمل ssh على النحو المنشود وتنبهك إلى أن الشهادة قد تغيرت ، وأرجع رمز خروج غير 0. من المحتمل أن يؤدي هذا إلى إيقاف أي برنامج نصي تستخدم فيه ssh أو git. - emhohensee


لا خيارات "StrictHostKeyChecking no" ولا "ssh-keyscan" آمنة. أنت بحاجة إلى التحقق من بصمة اليدوي في مرحلة ما لتجنب هجوم MiTM إذا كنت عصا مع ssh.

في الواقع ، لديك خياران:

استخدم بروتوكول https بدلاً من git

لن يطلب منك بصمة الإصبع ، لأن ssh غير معني ، يستخدم https بدلاً من ذلك. بالنسبة إلى وجهة نظر الأمان ، فأنت تثق في تثبيت شهادات الشهادات الجذرية على نظام التشغيل لديك. إذا كنت تستخدم صورة بسيطة أو عامل Docker ، فقد تحتاج إلى تثبيت حزمة الشهادات ca.

إذا كنت تريد حقا git + ssh البروتوكول

هل حقا بحاجة إلى إضافة المفتاح في وقت التشغيل؟ هذا غير آمن لأنك لم تحقق من بصمة الإصبع وهذا يتركك عرضة لهجمات MiTM. هذه ليست نظرية فقط ، وقد ثبت نجاحها.

قبل تشغيل البرنامج النصي ، احصل على المفتاح من جيثب (على جهازك المحلي):

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

قبل استنساخ بوابة.

لن يتغير مفتاح GitHub العام إلا إذا اعتقدوا أنه قد تم اختراقه (أو لم يكن آمنًا بما فيه الكفاية). إذا كان هذا هو الحال ، أنت تريد البرنامج النصي الخاص بك للفشل على أي حال.


80
2018-06-25 15:39



هذه هو الجواب الوحيد الصحيح والآمن لهذا السؤال. لماذا هو الأخير؟ أنا خجل من الإنسانية ؛-( - Jan Warchoł
لا يمكنك إجراء HTTPS غير تفاعلي باستخدام GitHub إذا كنت تستخدم اثنين من عوامل المصادقة ، للأسف. - Brett Widmeier
لا أرى لماذا لا. نحن نتحدث عن الريبو العام هنا ، لا حاجة للمصادقة. إن استنساخ ريبو خاص من نص برمجي شيء آخر تمامًا: تحتاج إلى تفويض نصك النصي للقيام بذلك. - autra
التحقق من بصمة الإصبع "يدويًا" أقل إيلاما مما يبدو ، بمساعدة "شريط البحث" في المستكشفين المعاصرين (كما هو الحال في كروم). - Franklin Yu


أعتقد أن الخيار الأفضل هنا هو النسخ الاحتياطي وإفراغ ~/.ssh/known_hosts ملف ، إجراء اتصال SSH يدويًا ، والتحقق من عنوان IP وبصمة الإصبع ، mv ~/.ssh/known_hosts ~/bitbucket_hosts، ثم استخدم محتويات ~/bitbucket_hostsفي البرنامج النصي الخاص بك لإلحاق بصمات الأصابع المعروفة إلى ملف known_hosts (لا تنسى استعادة الملف الأصلي ~/.ssh/known_hosts).

هذه الخطوة تحتاج فقط إلى القيام بها مرة واحدة (على أي جهاز ، على ما أعتقد) ، وبمجرد أن يكون لديك بصمات الأصابع ، يمكنك دمجها في البرنامج النصي الآلي الخاص بك.


7
2018-04-07 18:53





بينما أفهم بالتأكيد أنك تريد أتمتة مثل هذه العملية ، فإن القيام بذلك سيكون غير حكيم. السبب وراء رفض SSH ومكونات الشبكة الفرعية ذات الصلة عند استخدام بروتوكول آمن هو تحذير الإنسان بأن المفتاح العام للنظام غير معروف. هذا هو المقصود - يحتاج المستخدم إلى إبلاغ النظام بشكل صريح يتوقع المضيف. لا ترغب في قبول تلقائي لكل مفتاح عام مقدم لك أو جزء من الأمان في SSH أو TLS / SSL يمكن اختراقه. أحد الأمثلة على ذلك هو عن طريق هجوم رجل في الوسط مثل عندما يعرض برنامج بروكسي مفتاحه الخاص في مكان مضيف تتوقعه.

التقدم بحذر.

إذا لم يكن لديك أي خوف من مصدر الشفرة عبر السلك ، يجب عليك استخدام بروتوكول git: // صراحةً وحصريًا عند الاستنساخ - فهو بدون مصادقة وبنص واضح.


6
2018-01-22 22:34



يمكنني رؤية حالات الاستخدام بشكل قاطع حيث نحتاج إلى فرض استخدامات غير تفاعلية لـ git clone... وهذا لا يعني أننا نطلب قبول أي فحص (بصمة واحدة على وجه الخصوص). في حالتي ، سيكون من دواعي سروري تماما أن تفشل تلقائيا على هذا الشيء. - vaab


وكما قال جيف هول ، فإن القيام بذلك أمر خطير لأنه يسمح بتفجيرات الرجل غير المنتظمة. ومع ذلك ، يمكنك استخدام StrictHostKeyChecking no الخيار في ssh لتعطيل فحص مفاتيح المضيف. ومع ذلك ، سأكون حذرا جدا مع هذا الخيار إذا كنت أنت.


5
2018-02-03 07:45



كما يسمح حق الرجل في الوسط؟ - autra


مضيفا المفتاح ل .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

4
2018-02-16 10:42



كان هذا مثاليًا. يمكن وضعها بسهولة في برنامج نصي للنشر وأكثر أمانًا من تعطيل التحقق من المضيف. وهنا a واحد الخطوط الملاحية المنتظمة لجيثب: if [ ! -n "$(grep "^github.com " ~/.ssh/known_hosts)" ]; then ssh-keyscan github.com >> ~/.ssh/known_hosts 2>/dev/null; fi; ssh-agent bash -c "ssh-add /path/to/your/deploy/id_rsa; git clone -b master git@github.com:githubAccount/githubRepo.git /your/target/dir - tweak2
هذا لا يعمل عندما HashKnownHosts تم تمكينه في / الخ / سه / ssh_config (أو ~ / .ssh / التكوين). بدلا من [ ! -n "$(grep "^bitbucket.org " ~/.ssh/known_hosts)" ] سيكون من الأفضل للاستخدام [ ! "$(ssh-keygen -F bitbucket.org)" ]التي تجد خطوط مجزأة وغير مجزأة في known_hosts. - Claus Conrad