SSH: لا يمكن إنشاء صحة "اسم المضيف" المضيف
-
01-10-2019 - |
سؤال
عندما أقوم بتجهيز الجهاز ، أحصل على هذا الخطأ في وقت ما ، ويطلب من القول "نعم" أو "لا". هذا يتسبب في بعض المتاعب عند الركض من البرامج النصية التي تلقائيًا إلى آلات أخرى.
رسالة تحذير:
The authenticity of host '<host>' can't be established.
ECDSA key fingerprint is SHA256:TER0dEslggzS/BROmiE/s70WqcYy6bk52fs+MLTIptM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'pc' (ECDSA) to the list of known hosts.
هل هناك طريقة لقول "نعم" تلقائيًا أو تجاهل هذا؟
المحلول
اعتمادًا على عميل SSH الخاص بك ، يمكنك تعيين خيار StricThostkeyCheCking إلى NO على سطر الأوامر ، و/أو إرسال المفتاح إلى ملف NULL المعروف. يمكنك أيضًا تعيين هذه الخيارات في ملف التكوين الخاص بك ، إما لجميع المضيفين أو لمجموعة معينة من عناوين IP أو أسماء المضيف.
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
تعديل
كما يلاحظ @iniandunn ، هناك مخاطر أمنية للقيام بذلك. إذا كان المورد الذي تتصل به قد تم تخفيفه من قبل مهاجم ، فيمكنه إعادة تشغيل تحدي خادم الوجهة مرة أخرى ، ويخدعك في التفكير في أنك تتصل بالمورد البعيد بينما يتصلون بهذا المورد في الواقع بيانات اعتمادك. يجب أن تفكر بعناية ما إذا كان هذا يمثل خطرًا مناسبًا قبل تغيير آلية الاتصال الخاصة بك لتخطي HostKeyChecking.
نصائح أخرى
السؤال القديم يستحق إجابة أفضل.
يمكنك منع موجه التفاعلية دون تعطيل StrictHostKeyChecking
(وهو غير آمن).
دمج المنطق التالي في البرنامج النصي الخاص بك:
if [ -z `ssh-keygen -F $IP` ]; then
ssh-keyscan -H $IP >> ~/.ssh/known_hosts
fi
يتحقق مما إذا كان المفتاح العام للخادم موجودًا known_hosts
. إذا لم يكن الأمر كذلك ، فإنه يطلب المفتاح العام من الخادم ويضيفه إلى known_hosts
.
وبهذه الطريقة ، تتعرض للهجوم في الوسط مرة واحدة فقط ، والتي قد يتم تخفيفها من خلال:
- التأكد من أن البرنامج النصي يتصل لأول مرة عبر قناة آمنة
- تفتيش سجلات أو معروفة _hosts للتحقق من بصمات الأصابع يدويًا (سيتم القيام بها مرة واحدة فقط)
لتعطيل (أو التحكم في تعطيل) ، أضف الأسطر التالية إلى بداية /etc/ssh/ssh_config
...
Host 192.168.0.*
StrictHostKeyChecking=no
UserKnownHostsFile=/dev/null
خيارات:
- يمكن أن تكون الشبكة الفرعية المضيفة
*
للسماح بالوصول غير المقيد إلى جميع IPS. - يحرر
/etc/ssh/ssh_config
للتكوين العالمي أو~/.ssh/config
للتكوين الخاص بالمستخدم.
نرى http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html
سؤال مماثل على superuser.com - انظر https://superuser.com/a/628801/55163
تأكد ~/.ssh/known_hosts
قابل للكتابة. التي أصلحت لي.
أفضل طريقة للقيام بذلك هي استخدام "BatchMode" بالإضافة إلى "StricThostkeyChecking". وبهذه الطريقة ، سيقبل البرنامج النصي اسم مضيف جديد ويكتبه إلى ملف المعروف _hosts ، ولكنه لن يتطلب تدخل نعم/لا.
ssh -o BatchMode=yes -o StrictHostKeyChecking=no user@server.example.com "uptime"
قم بتحرير ملف التكوين الخاص بك الموجود عادة في "~/.ssh/config" ، وفي التسول للملف ، أضف الأسطر أدناه
Host *
User your_login_user
StrictHostKeyChecking no
IdentityFile ~/my_path/id_rsa.pub
تعيين المستخدم على your_login_user
يقول أن هذه الإعدادات تنتمي إلى your_login_user
STRICTHOSTKEYCHECKING SET إلى NO سوف تجنب المطالبة
IdentityFile هو طريق مفتاح RSA
هذا يعمل بالنسبة لي ولرصاصي ، حظًا سعيدًا لك.
يتم إصدار هذا التحذير بسبب ميزات الأمان ، لا تقم بتعطيل هذه الميزة.
يتم عرضه مرة واحدة فقط.
إذا كان لا يزال يظهر بعد الاتصال الثاني ، فربما تكون المشكلة كتابة إلى known_hosts
ملف. في هذه الحالة ، ستحصل أيضًا على الرسالة التالية:
Failed to add the host to the list of known hosts
يمكنك إصلاحه عن طريق تغيير مالك تغيير أذونات الملف من قبل المستخدم.
sudo chown -v $USER ~/.ssh/known_hosts
بالإشارة إلى إجابة Cori ، قمت بتعديله واستخدمته أدناه ، والذي يعمل. بدون exit
, ، كان الأمر المتبقي هو التسجيل بالفعل إلى الجهاز البعيد ، والذي لم أكن أريده في البرنامج النصي
ssh -o StrictHostKeyChecking=no user@ip_of_remote_machine "exit"
افعل هذا -> chmod +w ~/.ssh/known_hosts
. هذا يضيف إذن الكتابة إلى الملف على ~/.ssh/known_hosts
. بعد ذلك ستتم إضافة المضيف البعيد إلى known_hosts
ملف عند الاتصال به في المرة القادمة.
بشكل عام ، تحدث هذه المشكلة عندما تقوم بتعديل المفاتيح في كثير من الأحيان. بناءً على الخادم ، قد يستغرق الأمر بعض الوقت لتحديث المفتاح الجديد الذي قمت بإنشائه ولصقه في الخادم. لذلك بعد إنشاء المفتاح واللصق في الخادم ، انتظر لمدة 3 إلى 4 ساعات ثم حاول. يجب حل المشكلة. حدث ذلك معي.
من الناحية المثالية ، يجب عليك إنشاء سلطة شهادة تتم إدارتها ذاتيا. ابدأ بتوليد زوج مفتاح:
ssh-keygen -f cert_signer
ثم قم بتوقيع مفتاح المضيف العام لكل خادم:
ssh-keygen -s cert_signer -I cert_signer -h -n www.example.com -V +52w /etc/ssh/ssh_host_rsa_key.pub
هذا يولد مفتاح المضيف العام الموقّع:
/etc/ssh/ssh_host_rsa_key-cert.pub
في /etc/ssh/sshd_config
, ، نقطة HostCertificate
إلى هذا الملف:
HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub
أعد تشغيل خدمة SSHD:
service sshd restart
ثم على عميل SSH ، أضف ما يلي إلى ~/.ssh/known_hosts
:
@cert-authority *.example.com ssh-rsa AAAAB3Nz...cYwy+1Y2u/
أعلاه يحتوي على:
@cert-authority
- المجال
*.example.com
- المحتويات الكاملة للمفتاح العام
cert_signer.pub
ال cert_signer
سوف يثق المفتاح العام في أي خادم يتم توقيع مفتاح المضيف العام من قبل cert_signer
مفتاح سري.
على الرغم من أن هذا يتطلب تكوينًا لمرة واحدة على جانب العميل ، إلا أنه يمكنك الوثوق بخوادم متعددة ، بما في ذلك تلك التي لم يتم توفيرها بعد (طالما قمت بتوقيع كل خادم ، وهذا هو).
لمزيد من التفاصيل ، انظر صفحة الويكي هذه.
أضف هذه إلى/etc/ssh/ssh_config
Host *
UserKnownHostsFile=/dev/null
StrictHostKeyChecking=no
قم بتشغيل هذا في الخادم المضيف ، إنها مشكلة في الولادة
chmod -R 700 ~/.ssh
كان لدي نفس الخطأ وأردت لفت الانتباه إلى حقيقة أنه - كما حدث لي - قد يكون لديك امتيازات خاطئة فقط.
لقد قمت بإعداد الخاص بك .ssh
الدليل إما منتظم أو root
المستخدم وبالتالي يجب أن تكون المستخدم الصحيح. عندما ظهر هذا الخطأ ، كنت root
لكنني قمت بتكوين .ssh
كمستخدم عادي. الخروج root
تم التصليح.
أنا حل المشكلة التي تعطي أدناه خطأ مكتوب:
خطأ:
لا يمكن إنشاء صحة مضيف "xxx.xxx.xxx".
بصمة مفتاح RSA هي 09: 6C: EF: CD: 55: C4: 4F: SS: 5A: 88: 46: 0A: A9: 27: 83: 89.
المحلول:
1. تثبيت أي أداة openssh.
2. تشغيل Command SSH
3. سوف تطلب هل تضيف هذا المضيف مثل. تقبل نعم.
4. سيضيف هذا المضيف في قائمة المضيف المعروفة.
5. الآن أنت قادر على التواصل مع هذا المضيف.
هذا الحل يعمل الآن ......