← شروع آموزش

WIUNIX ACADEMY

ورود کوتاه‌مدت با گواهی OpenSSH و آزمون ابطال دسترسی

صفحهٔ 2 از 3؛ مراحل قبلی و پیش‌نیازها را پیش از ادامه مرور کن.

آموزش متناسب با محیط تو

کجا اجرا می‌کنی؟

سیستم‌عامل و نسخه را انتخاب کن تا مراحل، دستورها و راه‌حل‌ها برای همان محیط نمایش داده شوند.

Ubuntu 26.10بررسی‌شده با مستندات رسمی ·

آموزش متناسب با مقادیر تو

تنظیمات این آموزش

مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر می‌کنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری می‌شوند و به سرور یا لینک اشتراک‌گذاری فرستاده نمی‌شوند. پیش از اجرا، DNS، گواهی‌ها و سیاست شبکهٔ واقعی را بررسی کن.

آی‌پی، دامنه یا پورت مثال‌ها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای به‌روز‌شده را کپی کن.

تنظیم مقادیر برای محیط من4 مقدار قابل‌تغییر
05

قدم بعدی

سیاست میزبان را پیش از اجرای listener بررسی کنید

در این مسیر، daemon فقط روی loopback اجرا می‌شود. پورت عمومی باز نکنید. اگر سیاست امنیتی میزبان اجرای این فرایند یا خواندن فایل‌های تازه را منع می‌کند، با شواهد همان denial متوقف شوید و مشکل را در محدودهٔ VM حل کنید؛ SSH اصلی و کنترل دسترسی آن تغییر نمی‌کند.

bash

ترمینال میزبان مجاز معرفی‌شده در همین بخش

sudo journalctl -k --since '-10 min' --no-pager -n 80
از کجا بدانم درست انجام شد؟

لاگ سیاست امنیتی را با زمان خطا تطبیق داده‌اید؛ این مسیر Debian/Ubuntu هیچ نگاشت پورت یا قاعدهٔ فایروال تازه‌ای ایجاد نکرده است.

06

قدم بعدی

فایل جدا را بررسی کنید، نه SSH اصلی را

اعتبارسنجی نحو و نمایش تنظیمات مؤثر را با مسیر صریح فایل آزمایش اجرا کنید. port، listenaddress، مسیر اعتماد و ابطال، روش احراز هویت و فرمان اجباری باید با همین تمرین یکی باشند.

اگر ابزار از پیش‌نیاز بسته‌ای مانند شاخهٔ privilege separation شکایت کرد، همان نصب VM را از روند بومی بسته اصلاح کنید. تنظیمات سرویس اصلی را تغییر ندهید و برای عبور از خطا، جداسازی یا SELinux را خاموش نکنید.

bash

ترمینال همان میزبان معرفی‌شده در توضیح گام

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 دیده می‌شود.

07

قدم بعدی

daemon آزمایش را در ترمینال جدا اجرا کنید

روی همان VM یک ترمینال مجاز جدا باز کنید و این فرایند foreground را در آن اجرا نگه دارید. فرمان، سرویس SSH اصلی را start، restart یا enable نمی‌کند.

ترمینال daemon محل دیدن دلیل رد گواهی است؛ خروجی آن می‌تواند نام کاربر داشته باشد و باید خصوصی بماند. در پایان تمرین، فقط همین فرایند را با Ctrl+C متوقف کنید.

bash

ترمینال همان میزبان معرفی‌شده در توضیح گام

sudo /usr/sbin/sshd -D -e -f '/var/lib/academy-ssh-cert-lab/sshd_config'
از کجا بدانم درست انجام شد؟

فرایند جدا روی loopback گوش می‌دهد؛ بررسی کلاینت از ترمینال دیگری انجام می‌شود.

08

قدم بعدی

host key آزمایش را از فایل معتبر محلی ثبت کنید

در ترمینال دوم، listener را بررسی و fingerprint host key ساخته‌شده را تطبیق دهید. known_hosts جدا را از همان کلید عمومی محلی تهیه می‌کنیم؛ یک keyscan شبکه‌ای به‌تنهایی هویت سرور دور را تأیید نمی‌کند.

هیچ ورودی known_hosts عادی حذف نمی‌شود و بررسی host key هم خاموش نمی‌شود. فایل جدا فقط به همین loopback و پورت آزمایش مربوط است.

bash

ترمینال همان میزبان معرفی‌شده در توضیح گام

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 یکی است.

09

قدم بعدی

درست پیش از ورود، گواهی کوتاه‌مدت صادر کنید

فقط کلید عمومی کاربر امضا می‌شود. serial1001 و key ID این صدور را مشخص می‌کنند و principal باید با نگاشت حساب یکی باشد. صدور را اینجا انجام می‌دهیم تا اعتبار پانزده‌دقیقه‌ای هنگام آماده‌سازی محیط از دست نرود.

یک دقیقه ارفاق شروع، جای ساعت درست را نمی‌گیرد. با پاک‌شدن extensionهای پیش‌فرض، مجوز forwarding و PTY اضافه نمی‌شود؛ daemon نیز فرمان ثابت را تحمیل می‌کند. passphrase کلید CA را تعاملی وارد کنید.

bash

ترمینال همان میزبان معرفی‌شده در توضیح گام

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 پیش‌فرض دیده می‌شود.

10

قدم بعدی

ورود محدود با گواهی را امتحان کنید

از کلید و گواهی همین آزمایش، known_hosts جدا و agent غیرفعال استفاده کنید. passphrase کلید کاربر را در ترمینال وارد کنید. تنظیم کاربر و سیستم برای این درخواست کنار گذاشته می‌شود تا مسیر احراز هویت پنهان دیگری وارد بررسی نشود.

سرور مستقل از فرمان درخواستی، فقط id را با حساب labuser اجرا می‌کند. این نتیجه فقط همین CA، principal، اعتبار زمانی و حساب را می‌سنجد؛ آزمون نگهداری CA محیط عملیاتی یا rollout ناوگان نیست.

bash

ترمینال همان میزبان معرفی‌شده در توضیح گام

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 آزمایش پیدا کنید.

همهٔ آموزش‌های آکادمی ↗