WIUNIX ACADEMY
ورود کوتاهمدت با گواهی OpenSSH و آزمون ابطال دسترسی
صفحهٔ 2 از 3؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من4 مقدار قابلتغییر
قدم بعدی
سیاست میزبان را پیش از اجرای listener بررسی کنید
در این مسیر، daemon فقط روی loopback اجرا میشود. پورت عمومی باز نکنید. اگر سیاست امنیتی میزبان اجرای این فرایند یا خواندن فایلهای تازه را منع میکند، با شواهد همان denial متوقف شوید و مشکل را در محدودهٔ VM حل کنید؛ SSH اصلی و کنترل دسترسی آن تغییر نمیکند.
ترمینال میزبان مجاز معرفیشده در همین بخش
sudo journalctl -k --since '-10 min' --no-pager -n 80لاگ سیاست امنیتی را با زمان خطا تطبیق دادهاید؛ این مسیر Debian/Ubuntu هیچ نگاشت پورت یا قاعدهٔ فایروال تازهای ایجاد نکرده است.
قدم بعدی
فایل جدا را بررسی کنید، نه SSH اصلی را
اعتبارسنجی نحو و نمایش تنظیمات مؤثر را با مسیر صریح فایل آزمایش اجرا کنید. port، listenaddress، مسیر اعتماد و ابطال، روش احراز هویت و فرمان اجباری باید با همین تمرین یکی باشند.
اگر ابزار از پیشنیاز بستهای مانند شاخهٔ privilege separation شکایت کرد، همان نصب VM را از روند بومی بسته اصلاح کنید. تنظیمات سرویس اصلی را تغییر ندهید و برای عبور از خطا، جداسازی یا SELinux را خاموش نکنید.
ترمینال همان میزبان معرفیشده در توضیح گام
sudo /usr/sbin/sshd -t -f '/var/lib/academy-ssh-cert-lab/sshd_config' || exit 1
sudo /usr/sbin/sshd -T -f '/var/lib/academy-ssh-cert-lab/sshd_config' | awk '$1 ~ /^(port|listenaddress|trustedusercakeys|authorizedprincipalsfile|revokedkeys|forcecommand|authenticationmethods|authorizedkeysfile)$/ {print}'فایل جدا parse میشود و تنها127.0.0.1 روی پورت انتخابی در تنظیم listener دیده میشود.
قدم بعدی
daemon آزمایش را در ترمینال جدا اجرا کنید
روی همان VM یک ترمینال مجاز جدا باز کنید و این فرایند foreground را در آن اجرا نگه دارید. فرمان، سرویس SSH اصلی را start، restart یا enable نمیکند.
ترمینال daemon محل دیدن دلیل رد گواهی است؛ خروجی آن میتواند نام کاربر داشته باشد و باید خصوصی بماند. در پایان تمرین، فقط همین فرایند را با Ctrl+C متوقف کنید.
ترمینال همان میزبان معرفیشده در توضیح گام
sudo /usr/sbin/sshd -D -e -f '/var/lib/academy-ssh-cert-lab/sshd_config'فرایند جدا روی loopback گوش میدهد؛ بررسی کلاینت از ترمینال دیگری انجام میشود.
قدم بعدی
host key آزمایش را از فایل معتبر محلی ثبت کنید
در ترمینال دوم، listener را بررسی و fingerprint host key ساختهشده را تطبیق دهید. known_hosts جدا را از همان کلید عمومی محلی تهیه میکنیم؛ یک keyscan شبکهای بهتنهایی هویت سرور دور را تأیید نمیکند.
هیچ ورودی known_hosts عادی حذف نمیشود و بررسی host key هم خاموش نمیشود. فایل جدا فقط به همین loopback و پورت آزمایش مربوط است.
ترمینال همان میزبان معرفیشده در توضیح گام
sudo ss -lntp 'sport = :22222'
sudo ssh-keygen -lf '/var/lib/academy-ssh-cert-lab/host.pub'
sudo awk '{print "[127.0.0.1]:22222 " $1 " " $2}' '/var/lib/academy-ssh-cert-lab/host.pub' | sudo tee '/var/lib/academy-ssh-cert-lab/known_hosts' >/dev/null
sudo chmod 0644 '/var/lib/academy-ssh-cert-lab/known_hosts'فقط loopback شنونده است و fingerprint ثبتشده با ورودی جداگانهٔ known_hosts یکی است.
قدم بعدی
درست پیش از ورود، گواهی کوتاهمدت صادر کنید
فقط کلید عمومی کاربر امضا میشود. serial1001 و key ID این صدور را مشخص میکنند و principal باید با نگاشت حساب یکی باشد. صدور را اینجا انجام میدهیم تا اعتبار پانزدهدقیقهای هنگام آمادهسازی محیط از دست نرود.
یک دقیقه ارفاق شروع، جای ساعت درست را نمیگیرد. با پاکشدن extensionهای پیشفرض، مجوز forwarding و PTY اضافه نمیشود؛ daemon نیز فرمان ثابت را تحمیل میکند. passphrase کلید CA را تعاملی وارد کنید.
ترمینال همان میزبان معرفیشده در توضیح گام
sudo ssh-keygen -s '/var/lib/academy-ssh-cert-lab/user-ca' -I academy-user-1001 -z 1001 -n 'academy-operator' -V -1m:+15m -O clear '/var/lib/academy-ssh-cert-lab/client.pub'
sudo ssh-keygen -L -f '/var/lib/academy-ssh-cert-lab/client-cert.pub'گواهی USER، با CA و principal درست، serial1001، اعتبار کوتاه و بدون extension پیشفرض دیده میشود.
قدم بعدی
ورود محدود با گواهی را امتحان کنید
از کلید و گواهی همین آزمایش، known_hosts جدا و agent غیرفعال استفاده کنید. passphrase کلید کاربر را در ترمینال وارد کنید. تنظیم کاربر و سیستم برای این درخواست کنار گذاشته میشود تا مسیر احراز هویت پنهان دیگری وارد بررسی نشود.
سرور مستقل از فرمان درخواستی، فقط id را با حساب labuser اجرا میکند. این نتیجه فقط همین CA، principal، اعتبار زمانی و حساب را میسنجد؛ آزمون نگهداری CA محیط عملیاتی یا rollout ناوگان نیست.
ترمینال همان میزبان معرفیشده در توضیح گام
sudo ssh -F /dev/null -o StrictHostKeyChecking=yes -o 'UserKnownHostsFile=/var/lib/academy-ssh-cert-lab/known_hosts' -o IdentitiesOnly=yes -o IdentityAgent=none -i '/var/lib/academy-ssh-cert-lab/client' -o 'CertificateFile=/var/lib/academy-ssh-cert-lab/client-cert.pub' -p '22222' 'labuser@127.0.0.1'هویت حساب غیرroot چاپ و اتصال بسته میشود؛ اگر ورود رد شد، دلیلش را در همان daemon آزمایش پیدا کنید.