خطای Host key verification failed زمانی ظاهر میشود که سیستم شما نمیتواند به سرور موردنظر اعتماد کند؛ گویی که میخواهید وارد خانهای شوید که قفلش با کلید فعلی شما جور درنمیآید. البته جای نگرانی نیست؛ این مشکل قابل حل است! در این مقاله، دلایل بروز خطای host key verification failed و ۳ راهکار از روشهای رفع آن را در لینوکس، مک و ویندوز بهطور گامبهگام خواهیم گفت.
دلیل خطای احراز هویت Host key verification failed چیست؟
هر سرور یک کلید شناسایی منحصربهفرد دارد که مثل اثر انگشت انسان است. اگر این کلید تغییر کند، سیستم شما دیگر آن را نمیشناسد. ممکن است قبلا اطلاعات نادرستی از سرور در سیستم شما ذخیره شده باشد و حالا با اطلاعات جدید جور درنیاید؛ برای مثال، آدرس IP سرور عوض شده یا یک آپدیت نرمافزاری باعث تغییر کلید سرور شده است و حالا SSH قادر به تایید هویت سرور نیست.
اگر میخواهید یکبار برای همیشه با مبانی سیستمعامل لینوکس آشنا شوید، مقاله لینوکس چیست را بخوانید.
چگونه خطای Host key verification failed را در SSH رفع کنیم؟
در ادامه، سادهترین راه رفع خطای Host key verification failed را در SSH را به شما خواهیم گفت.
راهکار اول: حذف کلید میزبان قدیمی از فایل known_hosts
یکی از سادهترین و رایجترین روش های رفع خطای «عدم تایید کلید میزبان» در SSH، حذف ورودی کلید میزبان قدیمی از فایل known_hosts و افزودن ورودی جدید است. فایل known_hosts در لینوکس و مک در مسیر ~/.ssh/known_hosts و در ویندوز در مسیرهای مختلفی قرار دارد که در ادامه خواهیم گفت.
بیشتر بخوانید: آموزش ساخت swap file در لینوکس در 5 مرحله بسیار ساده
برای حذف ورودی کلید میزبان قدیمی از این فایل، مراحل زیر را دنبال کنید:
گام اول: شناسایی ورودی کلید میزبان قدیمی
SSH به شما خط شماره و فینگرتایپ Host Key نامطابق را اطلاع میدهد؛ برای مثال، اگر سعی کنید به سروری با آدرس آیپی 192.168.1.100 متصل شوید، ممکن است پیغامی مانند زیر مشاهده کنید:
The authenticity of host '192.168.1.100 (SSH host key fingerprint SHA256:uQa5wz5y7xRl9yGt7xqzXQ)' can't be established
در این مثال، ورودی کلید میزبان خط 3 فایل known_hosts و اثرانگشت SHA256:uQa5wz5y7xRl9yGt7xqzXQ را به ما نشان داده است.
گام دوم: حذف ورودی کلید میزبان قدیمی
از هر ویرایشگر متن یا ابزار خط فرمان میتوانید برای ویرایش فایل known_hosts و حذف خط حاوی کلید میزبان نامطابق استفاده کنید. به عنوان مثال، میتوانید از یکی از دو روش زیر اقدام کنید:
راه اول: حذف فایل با دستور sed
از دستور sed برای حذف خط 3 فایل known_hosts استفاده کنید:
sed -i '3d' /home/user/.ssh/known_hosts
راه دوم: حذف فایل با دستور ssh-keygen
همچنین با تعیین نام میزبان یا آدرس IP سرور میتوانید از دستور ssh-keygen برای حذف ورودی کلید میزبان استفاده کنید:
ssh-keygen -R 192.168.1.100
این دستور تمام ورودیهای کلید میزبان مطابق با نام میزبان یا آدرس IP مشخص شده را از فایل known_hosts حذف میکند.
بیشتر بخوانید: ssh چیست و چگونه کار میکند؟ کاربردها و نحوه استفاده
گام سوم: اتصال مجدد به سرور و پذیرش کلید میزبان جدید
پس از حذف ورودی کلید میزبان قدیمی، میتوانید دوباره به سرور متصل شوید. SSH از شما میخواهد کلید میزبان جدید را تایید کرده و آن را به فایل known_hosts اضافه کنید. ممکن است پیامی مانند این را مشاهده کنید:
برای پذیرش کلید میزبان جدید و ادامه اتصال، حرف «yes» را تایپ کنید. SSH کلید میزبان جدید را به فایل known_hosts اضافه کرده و دیگر از شما برای همان سرور نخواهد پرسید. به این ترتیب، موفق به رفع خطای Host key verification failed خواهید شد.
هشدار: با استفاده از این روش، شما بهطور مستقیم بدون تایید صحت، به کلید میزبان جدید اعتماد میکنید. این قضیه ممکن است سرور شما را در معرض حملات مختلف قرار دهد. بنابراین، فقط درصورتی از این روش استفاده کنید که مطمئن هستید کلید میزبان به دلیل مشخص تغییر کرده است و به سرور صحیح متصل میشوید.
راه حل دوم: جایگزین کردن Host Key سرور
اگر روش بالا برای رفع خطای Host key verification failed ، موفقیتآمیز نبود، Host Key روی سرور SSH را میتوانید با یک کلید جدید جایگزین کنید. در این بخش، مراحل انجام این کار را به زبان ساده و گام به گام با هم مرور میکنیم.
گام اول: ایجاد Host Key جدید
ابتدا باید یک Host Key جدید روی سرور SSH درست کنید. این کار با استفاده از دستور ssh-keygen انجام میشود. با این دستور میتوانید فرمت و الگوریتم دلخواه خود را برای کلید جدید انتخاب کنید؛ برای مثال، برای ایجاد یک کلید میزبان جدید با الگوریتم ECDSA و اندازه ۲۵۶ بیت، میتوانید دستور زیر را روی سرور بنویسید:
ssh-keygen -t ecdsa -b 256 -f /etc/ssh/ssh_host_ecdsa_key
این دستور یک فایل کلید میزبان جدید به نام ssh_host_ecdsa_key و یک فایل کلید عمومی به نام ssh_host_ecdsa_key.pub در پوشه /etc/ssh/ ایجاد میکند. البته میتوانید با توجه به نیاز خود فرمت، الگوریتم و نام فایلها را تغییر دهید.
گام دوم: پشتیبانگیری از کلید میزبان قدیمی
قبل از جایگزینی Host Key حتما از فایل کلید میزبان قدیمی و فایل کلید عمومی آن یک نسخه پشتیبان تهیه کنید. این کار برای مواقعی مفید است که بخواهید دوباره کلید قدیمی را بازیابی کنید. برای بکاپگیری میتوانید از دستور cp و کپی کردن فایلها به یک پوشه دیگر استفاده کنید؛ برای مثال برای بکاپگیری از کلید میزبان قدیمی ECDSA، دستور زیر را روی سرور اجرا کردیم:
cp /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ecdsa_key.old cp /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub.old
گام سوم: بهروزرسانی تنظیمات سرور SSH
در مرحله بعدی راهکار دوم رفع خطای Host key verification failed، باید تنظیمات سرور SSH را برای استفاده از Host Key جدید بهروزرسانی کنید. برای این کار، فایل تنظیمات سرور SSH در مسیر /etc/ssh/sshd_config را ویرایش کرده و مسیر، فرمت و الگوریتم کلید میزبان جدید را مشخص کنید.
ابتدا دستور مربوط به HostKey را پیدا کرده و مقدار آن را به نام فایل کلید میزبان جدید تنظیم کنید. برای مثال، برای استفاده از فایل کلید میزبان جدید ECDSA، میتوانید این خط را به فایل /etc/ssh/sshd_config اضافه کنید:
HostKey /etc/ssh/ssh_host_ecdsa_key
همچنین باید دستورات HostKeyAlgorithms و HostKeyFormat را برای مطابقت با فرمت و الگوریتم کلید میزبان جدید بهروزرسانی کنید. شما میتوانید با اضافه کردن این خطوط به فایل /etc/ssh/sshd_config این کار را انجام دهید:
HostKeyAlgorithms ecdsa-sha2-nistp256 HostKeyFormat 2
گام چهارم: راهاندازی مجدد سرور SSH
برای اعمال تغییرات، سرور SSH را با دستور systemctl راهاندازی مجدد کنید.
systemctl restart sshd
گام پنجم. اطلاعرسانی به کاربران
در نهایت، پس از جایگزین کردن Host Key روی سرور SSH، باید به کاربرانی که از طریق SSH به سرور متصل میشوند اطلاع دهید. از آنها بخواهید ورودی Host Key قدیمی را از فایل known_hosts خود حذف کرده و هنگام اتصال به سرور، کلید میزبان جدید را تایید کنند.
بیشتر بخوانید: 20 نکته طلایی برای امنیت در لینوکس
راه حل سوم: استفاده از گزینههای کلید SSH برای دور زدن تایید
روشی دیگر برای خطای Host key verification failed، استفاده از گزینههای کلید SSH برای دور زدن فرآیند تأیید است. این راهحل سریع، آسان و درعینحال بسیار خطرناک و ناامن است. دو گزینه کلید SSH وجود دارد که میتوانید برای دور زدن فرآیند تأیید استفاده کنید:
- -o UserKnownHostsFile=
- -o StrictHostKeyChecking=
این گزینهها را میتوانید در دستور SSH یا در فایل تنظیمات SSH استفاده کنید. در اینجا نحوه عملکرد آنها را توضیح میدهیم:
-o UserKnownHostsFile=
این گزینه به شما امکان میدهد یک فایل متفاوت برای ذخیره کلیدهای میزبان به جای فایل پیشفرض known_hosts مشخص کنید. این کار، از بررسی کلید میزبان در برابر فایل known_hosts توسط SSH جلوگیری میکند و هر کلید میزبانی را از سرور میپذیرد؛ برای مثال، میتوانید از این گزینه برای مشخص کردن یک فایل خالی به نام /dev/null با اجرای این دستور استفاده کنید:
ssh -o UserKnownHostsFile=/dev/null user@server1
o StrictHostKeyChecking=
این گزینه به شما امکان میدهد مشخص کنید SSH چگونه باید با تایید کلید میزبان برخورد کند. میتوانید از این گزینه برای تنظیم مقدار به no یا accept-new استفاده کنید که بررسی دقیق کلید میزبان را غیرفعال میکند و هر کلید میزبان جدید یا تغییر یافته را از سرور میپذیرد؛ برای مثال، در دستور زیر از این گزینه برای تنظیم مقدار به no استفاده کردیم:
ssh -o StrictHostKeyChecking=no user@server1
با استفاده از این دو گزینه، شما بدون هیچ تأییدی به سرور اعتماد میکنید. بنابراین، برای حفظ امنیت سرور فقط باید بهصورت موقت از این گزینهها استفاده کنید.
نحوه رفع خطای Host key verification failed در لینوکس و Mac
برای رفع ارور Host key verification failed در لینوکس و Mac میتوانید از راهکار ویرایش فایل known_hosts ازطریق روش اول که در بالا گفتیم، اقدام کنید. همچنین میتوانید خودتان آستین را بالا زده و ازطریق ویرایش دستی فایل known_hosts به رفع خطای Host key verification failed ، بپردازید. این کار را میتوانید با بهکار بردن دستور vi برای باز کردن فایل known_hosts انجام دهید.
vi ~/.ssh/known_hosts
- با دستور vi فایل را باز کنید.
- به خط مربوط به سرور موردنظر بروید.
- برای حذف آن خط، از دستور dd استفاده کنید.
- برای ذخیره تغییرات، از دستور wq استفاده کرده و کلید اینتر را بزنید.
رفع خطای Host key verification failed در ویندوز
در مورد ویندوز ممکن است کارتان برای پیدا کردن فایل پیچیدهتر باشد. مسیر دقیق ممکن است در نسخههای مختلف ویندوز و نرمافزارهای SSH متفاوت باشد. برخی از مکانهای احتمالی عبارتند از:
- ~\Users\~\AppData\Roaming\_ssh\
- C:\Users\username\.ssh\
- C:\cygwin64\home\bob\.ssh\known_hosts
پس از پیدا کردن محل فایل، میتوانید این فایل را با یک ویرایشگر متن باز کرده و خط مربوط به سرور مورد نظر را مشابه روالی که در راهکار اول گفتیم، حذف یا ویرایش کنید.
راهکارهای امن و پایدار ایران سرور، راهحل انواع ارورهای سرور
برای جلوگیری از بروز خطای «Host key verification failed» استفاده از هاست معتبر و مطمئنی همچون هاست لینوکس ایران سرور تجربهای امن و مطمئن برایتان رقم میزند. از جمله مهمترین مزیت هاست لینوکس ایران سرور شامل موارد زیر است:
- تحویل آنی
- پشتیبانی ۲۴/۷
- تراکم متناسب سرور ها
- ۱۴ روز گارانتی بازگشت وجه
- تنظیمات امنیتی پیشرفته و Anti DDOS
- کنترل پنل دایرکت ادمین (Direct Admin)
بیشتر بخوانید: دایرکت ادمین چیست؟ مزایا و معایب directadmin
حل مشکل خطای Host key verification failed با ۳ راهکار موثر
نحوه رفع خطای Host key verification failed در لینوکس و ویندوز را در این مقاله بررسی کردیم. ۳ راهکار برای رفع ارور Host key verification شامل:
- حذف کلید میزبان قدیمی از فایل known_hosts
- حذف فایل با دستور ssh-keygen
- استفاده از گزینههای کلید SSH برای دور زدن تایید
جمع بندی
امیدواریم با یکی از این راهکارها موفق به رفع ارور خطای Host key verification failed شده باشید. اگر نیاز به راهنمایی دارید، سوالتان را انتهای همین مقاله بنویسید تا راهنماییتان کنیم. خطاهای سرور و هاست ممکن است دردسر بزرگی هنگام اتصال به سرور برایتان بتراشند اما جای نگرانی نیست. با سرور مجازی ایران سرور، کسبوکار خود را به سطح بالاتری ببرید! با زیرساختهای قدرتمند، سرعت بالا، امنیت بینظیر و پشتیبانی ۲۴/۷، میتوانید بهراحتی نیازهای آنلاین خود را مدیریت کنید. انتخابی ایدهآل برای حرفهایها!
سوالات متداولی که شما میپرسید؟
۱. خطای «Host key verification failed» چیست؟
این خطا زمانی رخ میدهد که Host key ذخیرهشده در سیستم شما با کلید فعلی سرور مطابقت ندارد. این مشکل معمولاً به دلیل تغییر سرور یا نصب مجدد سیستم عامل ایجاد میشود.
۲. آیا میتوانم از اتصال به سرور بدون تأیید کلید میزبان استفاده کنم؟
بله، میتوانید با استفاده از گزینه -o StrictHostKeyChecking=no هنگام اتصال SSH، تأیید کلید میزبان را نادیده بگیرید. اما این روش یک راهحل موقتی است و به امنیت شما آسیب میرساند.
۳. چگونه از بروز ارور key verification failed جلوگیری کنم؟
شما میتوانید با فعال کردن گزینههای امنیتی مانند «Verify HostKey DNS» در تنظیمات SSH و اطمینان از تغییرات سرور، از بروز ارور key verification failed جلوگیری کنید.
منابع: