وبلاگ نت‌آرامآموزش، تجربه و راهکارهای زیرساخت

SSH بعد از ورود فوری قطع می‌شود؛ بررسی shell، نشست و تنظیمات حساب

تشخیص قطع نشست SSH بعد از ورود با بررسی لاگ، shell، PAM و محدودیت‌های حساب لینوکس.

انتشار:
توسط تیم فنی نت‌آرام
۶ دقیقه زمان مطالعه
۰ دیدگاه
محتوای تخصصی، ساده و کاربردی
هماهنگ با هویت حرفه‌ای نت‌آرام
بازگشت به لیست مقالات
تصویر شاخص مقاله SSH بعد از ورود فوری قطع می‌شود؛ بررسی shell، نشست و تنظیمات حساب در وبلاگ نت‌آرام
محتوای آموزشی وبلاگ نت‌آرام
SSH به سرور مجازی ایران وصل می‌شود و کلید یا رمز پذیرفته می‌شود، اما پنجره فوراً بسته می‌شود یا پیام Connection closed می‌بینید. احراز هویت تنها یکی از مراحل ورود است. بعد از آن سرور باید نشست، مجوزهای حساب و برنامه‌ای به نام shell یا فرمان تعیین‌شده را اجرا کند. مشکل در هر یک از این مرحله‌ها می‌تواند نشست را ببندد.
این راهنما مخصوص قطع بلافاصله پس از احراز هویت موفق است. اگر از ابتدا timeout یا Permission denied دارید، باید شبکه یا احراز هویت را جدا بررسی کنید. اگر اتصال بعد از چند دقیقه بیکاری قطع می‌شود، راهنمای قطع SSH در زمان بیکاری مناسب‌تر است. پیش از تغییر تنظیم SSH حتماً کنسول یا نشست مدیریتی دیگری نگه دارید.

۱. مرحله قطع را از سمت کلاینت مشخص کنید

روی رایانه‌ای که از آن وصل می‌شوید، نام کاربر و سرور واقعی را جایگزین کنید:
کد / دستورssh -vvv alice@example.com
خروجی جزئیات اتصال، تأیید هویت و ایجاد کانال را نشان می‌دهد. عبارت Authenticated to نشانه پذیرش احراز هویت است، اما الزاماً موفقیت بازشدن نشست یا مجوز ورود کامل را ثابت نمی‌کند. متن نزدیک لحظه قطع و زمان آن را یادداشت کنید. گزارش ممکن است نام حساب، IP و مسیر کلید را داشته باشد؛ قبل از ارسال بخش‌های حساس را حذف کنید. اگر اثر انگشت کلید میزبان تغییر غیرمنتظره کرده است، پیش از ادامه هویت سرور را از مسیر مستقل تأیید کنید.
برای مقایسه، اگر سیاست حساب اجازه اجرای فرمان می‌دهد، از کلاینت امتحان کنید:
کد / دستورssh -T alice@example.com 'id'
این فرمان بدون درخواست ترمینال تعاملی، id را اجرا می‌کند و باید شناسه حساب را نشان دهد. موفقیت آن و شکست ورود تعاملی می‌تواند به تنظیم ترمینال یا فایل‌های شروع shell اشاره کند. شکست آن علت را به‌تنهایی مشخص نمی‌کند؛ حساب محدود به SFTP یا ForceCommand ممکن است عمداً اجرای فرمان را ممنوع کرده باشد. هیچ محدودیت امنیتی را صرفاً برای موفقیت این آزمون حذف نکنید.

۲. لاگ همان تلاش را در سرور پیدا کنید

از کنسول پنل یا یک حساب مدیر دیگر به سرور وصل شوید. در لینوکس اجرا کنید:
کد / دستورsudo journalctl -u ssh --since '30 minutes ago' --no-pager sudo journalctl -u sshd --since '30 minutes ago' --no-pager
نام سرویس به توزیع وابسته است و ممکن است یکی از دو دستور لاگی نداشته باشد. در توزیع‌هایی که لاگ فایل جدا دارند، /var/log/auth.log یا /var/log/secure را با مجوز مناسب بررسی کنید. زمان، کاربر و IP همان تلاش را تطبیق دهید. دنبال خطایی پس از Accepted بگردید: خطای بازکردن session توسط PAM، shell ناموجود، محدودیت منابع یا فرمان اجباری ناموفق. خطای تلاش قدیمی کاربر دیگر را علت این رخداد فرض نکنید.

۳. حساب و shell را بررسی کنید

کد / دستورgetent passwd alice id alice
نام alice نمونه است. خروجی دستور اول معمولاً نام حساب، UID، خانه و shell را نشان می‌دهد؛ حساب ممکن است از سرویس دایرکتوری بیاید. فرمان دوم شناسه و گروه‌های همان حساب را نمایش می‌دهد. مسیر shell درج‌شده در خروجی را با فایل واقعی و سیاست حساب تطبیق دهید. برای نمونه اگر shell /bin/bash است:
کد / دستورls -l /bin/bash ls -ld /home/alice
مسیرها مثال‌اند. shell ناموجود یا خانه نامعتبر می‌تواند مشکل بسازد، اما حساب سرویس ممکن است عمداً nologin داشته باشد یا اجازه shell تعاملی نداشته باشد. تغییر shell با chsh بدون دانستن نقش حساب یک محدودیت امنیتی را از بین می‌برد. اگر بسته shell حذف شده، ابتدا علت و بسته معتبر توزیع را بررسی کنید؛ اگر حساب فقط برای SFTP طراحی شده، روش دسترسی مورد تأیید همان سرویس را به کار ببرید.

۴. تنظیم‌های وابسته به حساب و نشست را بخوانید

در سرور، تنظیم‌های مؤثر SSH را برای مشخصات اتصال نمونه بخوانید:
کد / دستورsudo sshd -T -C user=alice,host=client.example,addr=192.0.2.50 | grep -i -E 'forcecommand|chrootdirectory|permittty|usepam'
در این فرمان نام حساب، نام و IP کلاینت را با مقادیر واقعی جایگزین کنید؛ مقدارها برای ارزیابی قواعد Match هستند. نسخه و گزینه‌های پشتیبانی‌شده را با man sshd بررسی کنید. ForceCommand، chroot و عدم اجازه TTY ممکن است عمداً برای حساب تعیین شده باشند. کلید عمومی همان کاربر نیز می‌تواند محدودیت فرمان داشته باشد؛ پیش از اصلاح، مالک حساب و سیاست دسترسی را بشناسید. مستند sshd_config معنی این تنظیم‌ها را توضیح می‌دهد.
اگر لاگ PAM دلیل مشخصی مانند حساب منقضی یا محدودیت session دارد، همان مورد را با سیاست سازمان بررسی کنید. PAM، MFA یا کنترل حساب را برای امتحان خاموش نکنید. اگر فقط ورود تعاملی مشکل دارد، خطاهای فایل‌های شروع shell مانند .profile یا .bashrc را در کنسول بخوانید؛ از دست‌کاری فایل‌های حساب دیگر بدون هماهنگی خودداری کنید.

۵. فضای دیسک و منابع را نیز بسنجید

کد / دستورdf -h df -i
پرشدن فضا یا inode می‌تواند ایجاد فایل‌های موقت یا ثبت نشست را مختل کند. خروجی هر فایل‌سیستم را برای مسیر مرتبط بخوانید؛ فضای خالی یک دیسک دیگر مشکل ریشه یا خانه کاربر را رفع نمی‌کند. اگر inode پر است، راهنمای خطای No space با وجود فضای خالی روش تشخیص را توضیح می‌دهد. از حذف لاگ‌ها یا فایل‌های کاربر بدون شناخت مالک و نیاز بازیابی پرهیز کنید.

۶. تغییر را امن اعمال و نتیجه را تأیید کنید

پس از اصلاح علت مشخص، اگر فایل تنظیم sshd تغییر کرده، قبل از اعمال اجرا کنید:
کد / دستورsudo sshd -t sudo systemctl reload ssh
اگر اعتبارسنجی خطا داد reload نکنید. نام سرویس در بعضی توزیع‌ها sshd است. نشست قدیمی و کنسول را باز نگه دارید و از یک اتصال جدا با همان حساب، روش احراز هویت و شبکه قبلی ورود را آزمایش کنید. اگر تنظیم جدید دسترسی را خراب کرد، فایل ثبت‌شده قبلی را از کنسول برگردانید، دوباره sshd -t و سپس reload سرویس صحیح را انجام دهید.
در پایان بررسی کنید هم ورود مجاز و هم محدودیت حساب‌های دیگر طبق سیاست قبلی عمل می‌کنند. اگر قطع همچنان فقط از یک شبکه رخ می‌دهد و لاگ سرور نشست را طبیعی نشان می‌دهد، تجهیز میانی یا کلاینت را با زمان دقیق و گزارش دو طرف بررسی کنید؛ نباید هر reset شبکه را به shell نسبت داد.
اشتراک‌گذاری:
لینکدینتلگرامایکس

دیدگاه‌ها (۰)

دیدگاه‌های تاییدشده و پاسخ‌های تیم نت‌آرام