Connection Reset خطای رایجی در زمینه IT میباشد که امروز در خصوص آن صحبت میکنیم.
شاید کارشناسان تولید محتوا در خصوص خطای Connection Reset کمتر صحبت کرده باشند ولی اکثر فعالین حوزه IT در دوران کاری خود حداقل یکبار با این مورد مواجه شدهاند.
احتمالا برایتان پیش آمده که در طول ارتباط SSH از دستگاه خود به عنوان کاربر به دستگاه دیگر (سرور, سوییچ و …) پس از چند ثانیه کار نکردن با سرور ارتباط SSH با دستگاه را از دست بدهید. این نوع قطعی ارتباط میتواند به صورت خطاهای متداول زیر نمایشگر شود:
1: Connection reset
2: Connection reset by ip
3: Connection reset by peer
دلیل بروز این خطا چیست؟
در بعضی از موارد ممکن است این ایده به نظر شما برسد که دلیل این موضوع مربوط به isp و نقاط ضعف آن باشد.
البته این مورد هم میتواند در این موضوع دخیل باشد و نمیتوان نقش isp شما را انکار کرد ولی از آنجا که این اتفاق میتواند در هر کشور با هر زیرساختی و حتی در بهترین شرایط هم اتفاق بیافتد بنابراین قصد داریم تا به یکی از دلایل اصلی آن و چگونگی رفع این موضوع اشاره کنیم:
زمانی که شما به عنوان یک کاربر (client) اقدام به برقراری ارتباط با مقصد خود (server , switch , …) میکنید بعد از برقراری موفقیت آمیز ارتباط مبدا و مقصد و استقرار session میتوانید اقدام به اجرای دستورات مورد نظر خود از طریق این پروتکل نمایید.
طبق قوانین موجود در ارتباطات شبکه و فایروالهای میانه راه، درصورتی که یک session (منظور همان ارتباط ssh بین مبدا و مقصد) زمانی را بدون انجام فعالیت خاصی باز باشد، به صورت پیش فرض از طرف سیستم و فایروال بعد از مدت زمان مشخصی (معمولا 300 ثانیه که براساس تنظیمات متفاوت هر دستگاهی متغیر است) بسته خواهد شد.
برای شفافتر شدن این مساله یک مثال میزنیم:
فرض کنید شما سرور مجازی آلمان تهیه کردید و از پورت 22 به سرور خودتون در آلمان ssh میزنید، هیچ مشکلی وجود ندارد تا اینکه بعد از چند ساعت کار کردن خسته میشوید و به جهت رفع خستگی میز کارتان را ترک میکنید .
در این حالت صفحه ارتباط ssh شما باز است و بعد گذشت 300 ثانیه از آخرین دستوری که در putty وارد کردید، سیستم به طور خودکار این عدم کارکرد را تشخیص میدهد و از آنجایی که به نظر دیگر کاری با سرور ندارید، session شما را که همان ارتباط ssh شما در putty است؛ میبندد و زمانی که شما بازمیگردید با خطای connection reset مواجه میشوید.
چه کنیم که این اتفاق نیافتد؟ راه حل چیست؟
یکی از راهحلهای متداولی که جهت رفع این مورد وجود دارد اضافه کردن پارامتر keepalive براساس نوع سیستم عامل به تنظیمات ssh سرور است.
در صورتی که سیستم عامل لینوکس باشد میتوانید از طریق دستور زیر اقدام کنید:
echo ‘ClientAliveInterval 60’ >> /etc/ssh/sshd_config
بعد از انجام این مورد برای اعمال تنظیمات نیاز است سرویس ssh سرور را یک مرتبه ریاستارت کنید. برای این کار میتوانید از دستور زیر استفاده کنید
Systemctl restart sshd
و اگر از سیستم عامل ویندوز استفاده میکنید:
مشابه مورد بالا میتوانید فایلی به نام config در مسیر زیر بسازید
C:\Users\admin\.ssh
و عبارت ServerAliveInterval 60 در فایل فوق را قرار دهید.
نحوه عملکرد این دستور چگونه است؟
در توضیح نحوه عملکرد عبارت AliveInterval 60 لازم است ذکر کنیم این دستور هر 60 ثانیه یکبار پیامهای خالی به سرویسگیرنده و یا سرویسدهنده ارسال میکند و مانع idle بودن session و در نهایت بسته شدن آن از طرف سیستم عامل یا فایروال میشود.
برای سفارش سرور مجازی لینوکسی میتوانید از این لینک اقدام کنید.
امیدوارم مطالعه این مقاله برای شما لذت بخش بوده باشد … با آرزوی موفقیت