صحنهٔ آموزشی OpenSSH؛ کارشناسی با لپ‌تاپ و کتاب‌های SSH و امنیت لینوکس روی میز.

WIUNIX ACADEMY

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

بدون تغییر SSH اصلی، یک sshd جدا روی loopback راه بیندازید؛ گواهی محدود صادر کنید و نشان دهید ابطال، اتصال تازه را رد می‌کند.

پیشرفته55 دقیقه مطالعهبه‌روزرسانی
محیطت را انتخاب کن

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

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

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

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

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

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

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

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

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

از اینجا شروع کن

در پایان چه چیزی خواهی داشت؟

در یک محیط آزمایشی جدا، ورود با گواهی کوتاه‌مدت را از ورود با کلید عمومی بدون گواهی جدا کنید و اثر فهرست ابطال را روی همان گواهی بسنجید.

سیستم‌عامل‌ها و نسخه‌های پوشش‌داده‌شده

مسیرهای این آموزش با مستندات رسمی ابزار و توزیع انتخابی بررسی شده‌اند. فرمان‌های آموزشی روی سرویس شما اجرا نشده‌اند؛ نتیجهٔ محیط خودتان را در هر گام بررسی کنید.

قبل از شروع

  • یک VM آزمایشی دورریختنی با OpenSSH Server نصب‌شده و یک حساب غیرroot موجود، مجاز و قفل‌نشده.
  • نشست مدیریت معمول باز می‌ماند؛ پورت انتخابی آزاد و فقط روی loopback استفاده می‌شود.
  • کلید CA و کلید کاربر فقط در محیط خصوصی آزمایش نگهداری می‌شوند؛ passphrase در ترمینال وارد می‌شود، نه فرم مرورگر یا خط فرمان.

CA آزمایشی را از ورود واقعی جدا نگه دارید

این تمرین روی یک VM و یک حساب موجود انجام می‌شود؛ معماری CA محیط عملیاتی نیست. تنظیم SSH اصلی، کلید ورود معمول و پورت عمومی دست‌نخورده می‌مانند.

در محیط عملیاتی، نگهداری امن و جداگانهٔ CA، ثبت صدور، ساعت دقیق و توزیع قابل اعتماد ابطال لازم است. گواهی کاربر، مالکیت یک کلید عمومی را با مجوزهای مشخص تأیید می‌کند؛ جای بررسی host key سرور را نمی‌گیرد.

01

قدم بعدی

پیش از شروع، ابزار و تفاوت‌های توزیع را بررسی کنید

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

مسیر پیش‌فرض برای Ubuntu 26.10 بررسی شده است؛ گزینه‌های 26.04 LTS و 24.04 LTS نیز در دسترس‌اند. بسته‌ها را با همان انتشار و پیکربندی واقعی میزبان تطبیق دهید.

نام بستهٔ کلاینت در این مسیر openssh-client است. سرویس عادی ssh (و گاهی ssh.socket) فقط برای ثبت وضع موجود بررسی می‌شود؛ تمرین، آن را start، restart یا reload نمی‌کند. حساب آزمایش باید از قبل معتبر، غیر root و مجاز باشد. روی خانوادهٔ Red Hat، کلیدهای آزمایش RSA با اندازهٔ 3072 بیت ساخته می‌شوند؛ Ed25519 در حالت FIPS قابل استفاده نیست. استفاده از RSA در اینجا به معنی تأیید FIPS کل محیط نیست.

اگر پیش‌نیاز بسته یا دایرکتوری privilege separation موجود نیست، قبل از ساخت آزمایش، آماده‌سازی رسمی همان بسته را روی VM انجام دهید. نبود /run/sshd را با خاموش‌کردن privilege separation یا تغییر SSH اصلی دور نزنید.

bash

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

cat /etc/os-release
dpkg-query -W openssh-server openssh-client iproute2
command -v ssh ssh-keygen ss
systemctl show ssh.service -p ActiveState -p FragmentPath
sudo test -x /usr/sbin/sshd
sudo test -d /run/sshd
از کجا بدانم درست انجام شد؟

بسته و ابزار لازم شناسایی شده است؛ خطا یا نبود ابزار را پیش از ادامه رفع کنید.

02

قدم بعدی

حساب، پورت و شاخه را پیش از ساخت تطبیق دهید

نشست مدیریت عادی را باز نگه دارید. حساب labuser باید از قبل وجود داشته، غیرroot و مجاز به ورود باشد. نبود حساب، قفل‌بودن آن یا اشغال‌بودن پورت 22222 دلیل توقف است؛ این آموزش PAM یا وضعیت حساب را تغییر نمی‌دهد.

/var/lib/academy-ssh-cert-lab باید مسیر تازه باشد، نه symlink، mount یا دادهٔ برنامه. خروجی پورت را بخوانید؛ اگر شنونده‌ای دیده می‌شود، پورت تازه‌ای در تنظیمات انتخاب کنید.

bash

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

date -u +'%Y-%m-%dT%H:%M:%SZ'
ssh -V
getent passwd 'labuser'
test "$(id -u 'labuser')" -ne 0 || exit 1
sudo ss -lntp 'sport = :22222'
sudo test ! -e '/var/lib/academy-ssh-cert-lab' || exit 1
sudo mkdir -m 0700 -- '/var/lib/academy-ssh-cert-lab'
از کجا بدانم درست انجام شد؟

حساب درست، پورت آزاد و شاخهٔ اختصاصی تازه با مالک root مشخص‌اند.

03

قدم بعدی

سه نقش کلید را از هم جدا کنید

کلید CA برای امضا، کلید کاربر برای ورود و host key برای شناسایی همین listener است؛ کلیدهای محیط عملیاتی را در این آزمایش استفاده نکنید. کلید CA و کاربر passphrase تعاملی دارند. مقدار را فقط در ترمینال وارد کنید و هیچ فایل موجودی را بازنویسی نکنید.

host key آزمایش بدون passphrase است تا daemon بتواند آن را بخواند، اما فایل خصوصی root-only می‌ماند. نوع کلید در مسیر سیستم‌عامل انتخابی مشخص شده است؛ محدودیت سیاست رمزنگاری را با فعال‌کردن الگوریتم قدیمی دور نزنید.

bash

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

sudo ssh-keygen -t ed25519 -f '/var/lib/academy-ssh-cert-lab/user-ca' -C academy-lab-ca
sudo ssh-keygen -t ed25519 -f '/var/lib/academy-ssh-cert-lab/client' -C academy-lab-user
sudo ssh-keygen -t ed25519 -N '' -f '/var/lib/academy-ssh-cert-lab/host' -C academy-lab-host
sudo ssh-keygen -lf '/var/lib/academy-ssh-cert-lab/user-ca.pub'
sudo ssh-keygen -lf '/var/lib/academy-ssh-cert-lab/host.pub'
از کجا بدانم درست انجام شد؟

سه جفت کلید مستقل ساخته شده‌اند و بخش خصوصی فقط برای root خواندنی است؛ تنها fingerprint عمومی را ثبت کنید.

04

قدم بعدی

نام مجاز را به همان حساب وصل کنید

فایل principals فقط academy-operator را برای حساب labuser مجاز می‌کند. sshd ممکن است این فایل را با دسترسی حساب هدف بخواند؛ به همین دلیل دایرکتوری والد مجوز عبور 0711 دارد و فایل نگاشت عمومی در شاخه‌ای با مجوز 0755 و با مجوز فایل 0644 قرار می‌گیرد.

فهرست شاخه و کلیدهای خصوصی عمومی نمی‌شوند؛ هر کلید خصوصی root0600 می‌ماند. RevokedKeys ابتدا یک فایل متن خالی و خواندنی است. ناخواندنی‌شدن آن می‌تواند همهٔ احراز هویت public key این listener را رد کند، پس خوانایی و جایگزینی سالمش مهم است.

bash

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

sudo chmod 0600 '/var/lib/academy-ssh-cert-lab/user-ca' '/var/lib/academy-ssh-cert-lab/client' '/var/lib/academy-ssh-cert-lab/host'
sudo chmod 0711 '/var/lib/academy-ssh-cert-lab'
sudo install -d -m 0755 '/var/lib/academy-ssh-cert-lab/principals'
printf '%s\n' 'academy-operator' | sudo tee '/var/lib/academy-ssh-cert-lab/principals/labuser' >/dev/null
sudo chmod 0644 '/var/lib/academy-ssh-cert-lab/principals/labuser'
sudo install -m 0644 /dev/null '/var/lib/academy-ssh-cert-lab/revoked'
sudoedit '/var/lib/academy-ssh-cert-lab/sshd_config'
از کجا بدانم درست انجام شد؟

نگاشت صریح حساب و فایل ابطال خواندنی آماده‌اند؛ فقط فایل تنظیم تازهٔ آزمایش ویرایش می‌شود.

listener آزمایش را فقط به loopback محدود کنید

این فایل کامل، تنظیم SSH اصلی را Include نمی‌کند. در همین listener، ورود با رمز و raw authorized key بسته است و محدودیت‌های حساب PAM همچنان برقرارند. حساب قفل‌شده را برای گرفتن نتیجهٔ موفق ضعیف نکنید.

سرور فقط فرمان کم‌خطر id را اجرا می‌کند؛ shell تعاملی، PTY و forwarding نمی‌دهد. این فایل را روی تنظیمات سرویس اصلی کپی نکنید. مسیر host key و ملاحظات SELinux در نسخهٔ انتخابی با همان محیط هماهنگ شده‌اند.

text · /var/lib/academy-ssh-cert-lab/sshd_config

محتوای فایل؛ این پنل را در ترمینال اجرا نکنید

Port 22222
ListenAddress 127.0.0.1
HostKey /var/lib/academy-ssh-cert-lab/host
PidFile none
UsePAM yes
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
AuthenticationMethods publickey
AuthorizedKeysFile none
TrustedUserCAKeys /var/lib/academy-ssh-cert-lab/user-ca.pub
AuthorizedPrincipalsFile /var/lib/academy-ssh-cert-lab/principals/%u
RevokedKeys /var/lib/academy-ssh-cert-lab/revoked
AllowUsers labuser
PermitRootLogin no
DisableForwarding yes
X11Forwarding no
PermitTTY no
ForceCommand /usr/bin/id
LogLevel VERBOSE
همهٔ آموزش‌های آکادمی ↗