HOPA
شرکت مهندسی و توسعه فناوری‌های نوینهور پردازان آریا
HOPA
شرکت مهندسی و توسعه فناوری‌های نوینهور پردازان آریا
نسخه‌ی عمومی وب‌سایت
HOPA Academy • آموزش‌های شبکه • قسمت ۱

آموزش جامع PuTTY
از صفر تا حرفه‌ای

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

📸 ۵۰+ تصویر واقعی🧭 ۱۹ فصل🖥 آزمایشگاه روی VPS واقعی⏱ حدود ۶۰ دقیقه
root@srv: ~ — PuTTY
Using username "root".
Authenticating with public key ""
Welcome to Ubuntu 26.04.1 LTS
root@srv:~# ss -tlnp | grep ssh
LISTEN  0.0.0.0:22    users:(("sshd"))
LISTEN  0.0.0.0:2222  users:(("sshd"))
root@srv:~# nft list quota inet netuser_quota netuser_q
  quota netuser_q { over 51200 mbytes }
root@srv:~# 
۰۱
معرفی

PuTTY چیست و چرا مهم است؟

PuTTY یک کلاینت رایگان و متن‌باز برای ویندوز است که با آن می‌توانید از راه دور به سرورها، روترها، سوئیچ‌ها، فایروال‌ها و هر دستگاهی که خط فرمان دارد وصل شوید. برای یک کارشناس شبکه و IT، PuTTY همان «آچار فرانسه»ی روزمره است: SSH به سرور لینوکسی، Telnet به یک سوئیچ قدیمی سیسکو، یا اتصال کنسول (Serial) به روتری که تازه از جعبه درآمده.

SSHاتصال امن و رمزنگاری‌شده — پورت ۲۲
Telnetاتصال قدیمی و بدون رمزنگاری — پورت ۲۳
Serialاتصال کنسول با کابل به COM — بدون نیاز به IP
Raw / Rloginاتصال خام TCP و پروتکل‌های قدیمی
خانواده‌ی PuTTY فقط یک برنامه نیست؛ کنارش ابزارهای مفیدی نصب می‌شوند:
  • putty.exe — کلاینت اصلی (موضوع این آموزش)
  • puttygen.exe — ساخت و تبدیل کلید SSH (فرمت ‎.ppk‎)
  • pageant.exe — نگه‌دارنده‌ی کلیدها در حافظه (SSH Agent)
  • pscp.exe و psftp.exe — انتقال فایل از طریق SSH
  • plink.exe — نسخه‌ی خط فرمانی PuTTY برای اسکریپت‌نویسی
۰۲
شروع کار

دانلود، نصب و اجرای اولیه

  1. دانلود فقط از سایت رسمی: https://www.chiark.greenend.org.uk/~sgtatham/putty/ — نسخه‌ی MSI ‏64-bit را بگیرید. از سایت‌های ناشناس دانلود نکنید؛ نسخه‌های آلوده‌ی PuTTY برای سرقت رمز سرورها شناخته‌شده‌اند.
  2. نصب: فایل MSI را اجرا کنید و Next بزنید. به‌طور پیش‌فرض در C:\Program Files\PuTTY نصب می‌شود (روی سیستم شما هم همین‌جاست).
  3. اجرا: از منوی Start عبارت PuTTY را جستجو کنید. پنجره‌ی PuTTY Configuration باز می‌شود — همه‌ی تنظیمات از همین‌جا انجام می‌شود.
PuTTY Configuration روی دسکتاپ
PuTTY Configuration روی دسکتاپ1
  1. 1پنجره‌ی تنظیمات PuTTY؛ سمت چپ درخت دسته‌ها، سمت راست تنظیمات همان دسته

نمای واقعی از اجرای PuTTY روی همین سیستم

ساختار پنجره: سمت چپ یک درخت به نام Category هست با چهار شاخه‌ی اصلی: Session، Terminal، Window و Connection. با کلیک روی هر مورد، سمت راست عوض می‌شود. در ادامه دقیقاً به همین ترتیب همه‌ی صفحه‌ها را مرور می‌کنیم.
۰۳
Session

صفحه‌ی Session — مهم‌ترین صفحه

۹۰٪ کار روزمره فقط با همین صفحه انجام می‌شود: آدرس را وارد کنید، نوع اتصال را انتخاب کنید و Open بزنید.

Session
Session1234567
  1. 1Host Name (or IP address) — آدرس IP یا نام دستگاه مقصد. می‌توانید [email protected] هم بنویسید تا نام کاربری خودکار پر شود.
  2. 2Port — با تغییر نوع اتصال خودکار عوض می‌شود: SSH=22، Telnet=23. اگر سرور روی پورت دیگری است اینجا عوض کنید.
  3. 3Connection type — SSH (امن)، Serial (کنسول) یا Other برای Telnet/Rlogin/Raw.
  4. 4Saved Sessions — یک نام بنویسید (مثلاً Core-Switch) تا همه‌ی تنظیمات فعلی با این نام ذخیره شود.
  5. 5Load / Save / Delete — بارگذاری، ذخیره و حذف نشست‌ها. دوبار کلیک روی یک نشست ذخیره‌شده = اتصال مستقیم.
  6. 6Close window on exit — رفتار پنجره پس از قطع اتصال. «Never» برای دیدن پیام خطا مفید است.
  7. 7Open — شروع اتصال.

اولین اتصال SSH، قدم‌به‌قدم

  1. در Host Name آدرس سرور را بنویسید، مثلاً 192.168.1.10.
  2. Connection type روی SSH و Port روی 22 باشد.
  3. Open را بزنید.
  4. در اولین اتصال هشدار Security Alert درباره‌ی کلید میزبان (Host Key) می‌آید. اگر به سرور اعتماد دارید Accept بزنید تا اثرانگشت آن ذخیره شود.
  5. جلوی login as: نام کاربری و بعد رمز را وارد کنید. (هنگام تایپ رمز هیچ کاراکتری نمایش داده نمی‌شود؛ طبیعی است.)
اگر هشدار Host Key برای سروری که قبلاً به آن وصل شده‌اید دوباره ظاهر شد، یعنی کلید سرور عوض شده. یا سرور دوباره نصب شده، یا کسی وسط راه است (Man-in-the-Middle). قبل از Accept با مدیر سرور چک کنید.

ترفند ذخیره‌ی نشست به‌صورت حرفه‌ای

ترتیب درست این است: اول همه‌ی تنظیمات (رنگ، فونت، کلید، Keepalive و…) را در صفحه‌های دیگر انجام دهید، بعد به Session برگردید، نام را بنویسید و Save بزنید. اگر Default Settings را انتخاب و Save کنید، تنظیمات شما پیش‌فرض همه‌ی اتصال‌های جدید می‌شود.

۰۴
Real-World Lab

مثال واقعی ۱: اتصال به سرور مجازی شرکت

سناریوی آزمایشگاه: یک سرور مجازی (VPS) با Ubuntu 26.04 LTS داریم به آدرس 46.249.xxx.xxx. همه‌ی تصاویر این بخش و بخش‌های بعدی از یک جلسه‌ی کاری واقعی روی همین سرور گرفته شده‌اند، همراه با خطاها و راه‌حل‌هایشان، دقیقاً همان‌طور که در دنیای واقعی پیش می‌آید. آدرس IP در نسخه‌ی عمومی به دلایل امنیتی مخدوش شده است.

قدم ۱ — وارد کردن آدرس سرور

Session — آدرس سرور واقعیLIVE • سرور واقعی
Session — آدرس سرور واقعی123
  1. 1آدرس IP سرور: 46.249.xxx.xxx
  2. 2نوع اتصال SSH و پورت ۲۲ (پیش‌فرض)
  3. 3زدن Open برای شروع اتصال

قدم ۲ — هشدار کلید میزبان و صفحه‌ی ورود

در اولین اتصال به هر سرور، پنجره‌ی PuTTY Security Alert باز می‌شود و اثرانگشت کلید سرور را نشان می‌دهد. با Accept این اثرانگشت در رجیستری ویندوز ذخیره می‌شود و دفعات بعد دیگر سؤالی پرسیده نمی‌شود. در جلسه‌ی ما چون قبلاً به این سرور وصل شده بودیم، هشدار نیامد و مستقیم به صفحه‌ی ورود رسیدیم:

ترمینال — درخواست نام کاربریLIVE • سرور واقعی
ترمینال — درخواست نام کاربری1
  1. 1login as: — سرور منتظر نام کاربری است. عنوان پنجره هم آدرس سرور را نشان می‌دهد.

قدم ۳ — یک خطای واقعی و آموزنده!

نام کاربری root را وارد کردیم و بلافاصله این خطا ظاهر شد:

PuTTY Fatal ErrorLIVE • سرور واقعی
PuTTY Fatal Error1
  1. 1No supported authentication methods available (server sent: publickey)
این خطا یعنی چه؟ سرور اعلام کرده تنها روش ورودی که قبول می‌کند publickey (کلید عمومی) است. یعنی ورود با رمز عبور روی این سرور کاملاً بسته است؛ حتی اگر رمز درست را داشته باشید، اجازه‌ی وارد کردنش را ندارید. این یک تنظیم امنیتی عالی است (بسیاری از سرورهای ابری به‌صورت پیش‌فرض این‌طورند) و راه‌حلش استفاده از فایل کلید خصوصی است که هنگام ساخت سرور تحویل گرفته‌اید.
۰۵
PuTTYgen

مثال واقعی ۲: تبدیل کلید ‎.pem به ‎.ppk با PuTTYgen

ارائه‌دهنده‌ی سرور یک فایل private-key-file.pem (فرمت OpenSSH) داده بود. PuTTY فقط فرمت خودش یعنی .ppk را می‌خواند، پس باید با PuTTYgen تبدیلش کنیم:

PuTTY Key GeneratorLIVE • سرور واقعی
PuTTY Key Generator123
  1. 1Load — بارگذاری کلید خصوصی موجود (کار ما همین است)
  2. 2Generate — ساخت جفت‌کلید کاملاً جدید
  3. 3نوع کلید برای ساخت کلید جدید: RSA، ECDSA، EdDSA (پیشنهادی)
انتخاب فایل pemLIVE • سرور واقعی
انتخاب فایل pem123
  1. 1مهم: فیلتر را روی All Files (*.*) بگذارید، وگرنه فایل pem دیده نمی‌شود!
  2. 2فایل private-key-file.pem در پوشه‌ی Downloads
  3. 3Open
PuTTYgen NoticeLIVE • سرور واقعی
PuTTYgen Notice1
  1. 1پیام موفقیت: کلید خارجی (OpenSSH) وارد شد؛ برای استفاده در PuTTY باید با Save private key ذخیره شود.
کلید بارگذاری شدLIVE • سرور واقعی
کلید بارگذاری شد1234
  1. 1کلید عمومی — همین متن است که روی سرور در ~/.ssh/authorized_keys قرار می‌گیرد
  2. 2Fingerprint — اثرانگشت کلید (RSA 2048 بیتی)
  3. 3Key passphrase — رمز محافظ فایل کلید (اختیاری ولی پیشنهادی)
  4. 4Save private key — ذخیره با فرمت ppk
هشدار نبود PassphraseLIVE • سرور واقعی
هشدار نبود Passphrase1
  1. 1PuTTYgen هشدار می‌دهد کلید بدون رمز محافظ ذخیره می‌شود. ما Yes زدیم چون فایل اصلی هم بی‌رمز بود؛ در محیط واقعی بهتر است Passphrase بگذارید.
ذخیره‌ی فایل ppkLIVE • سرور واقعی
ذخیره‌ی فایل ppk12
  1. 1نام فایل: hopa-server.ppk
  2. 2Save
فایل کلید = کلید ورود به سرور! هر کس فایل ppk (یا pem) بدون Passphrase را داشته باشد، به‌عنوان root وارد سرور می‌شود. آن را در ایمیل، تلگرام یا فضای ابری عمومی قرار ندهید و از آن نسخه‌ی پشتیبان امن داشته باشید.
۰۶
Saved Session

مثال واقعی ۳: تنظیم کلید و ذخیره‌ی نشست حرفه‌ای

حالا یک نشست کامل می‌سازیم تا از این به بعد با یک دوبار کلیک و بدون تایپ هیچ چیزی وارد سرور شویم.

الف) معرفی فایل کلید

Connection › SSH › Auth › Credentials › BrowseLIVE • سرور واقعی
Connection › SSH › Auth › Credentials › Browse12
  1. 1انتخاب hopa-server.ppk
  2. 2Open
CredentialsLIVE • سرور واقعی
Credentials12
  1. 1مسیر کلید در فیلد Private key file for authentication نشست
  2. 2مسیر در درخت تنظیمات: Connection › SSH › Auth › Credentials

ب) نام کاربری خودکار

Connection › DataLIVE • سرور واقعی
Connection › Data1
  1. 1Auto-login username = root — دیگر login as: پرسیده نمی‌شود

ج) جلوگیری از قطع شدن

ConnectionLIVE • سرور واقعی
Connection1
  1. 1Keepalives = 30 — هر ۳۰ ثانیه یک بسته‌ی خالی تا فایروال‌ها اتصال بی‌کار را نبندند

د) آدرس و نام نشست، سپس Save

SessionLIVE • سرور واقعی
Session12
  1. 1آدرس سرور
  2. 2نام نشست: HOPA-Server
نشست ذخیره شدLIVE • سرور واقعی
نشست ذخیره شد123
  1. 1HOPA-Server به لیست اضافه شد؛ دوبار کلیک = اتصال مستقیم
  2. 2Save — بعد از هر تغییر دوباره بزنید (Load → تغییر → Save)
  3. 3Open
ترتیب طلایی: همیشه اول همه‌ی تنظیمات (کلید، کاربر، Keepalive، رنگ…) را انجام دهید و در آخر در صفحه‌ی Session نام بدهید و Save کنید. اگر قبل از تنظیمات Save کنید، تغییرات بعدی ذخیره نمی‌شوند.
۰۷
First Login

مثال واقعی ۴: ورود موفق و شناخت سرور

ورود موفق با کلیدLIVE • سرور واقعی
ورود موفق با کلید123
  1. 1Authenticating with public key — ورود با کلید، بدون رمز
  2. 2سیستم‌عامل: Ubuntu 26.04.1 LTS با کرنل 7.0
  3. 3خلاصه‌ی وضعیت: بار سیستم، مصرف دیسک و رم، تعداد پردازه‌ها و آدرس‌ها
خط فرمان آماده استLIVE • سرور واقعی
خط فرمان آماده است1
  1. 1root@srv…:~# — علامت # یعنی کاربر root هستید؛ هر دستوری با بالاترین سطح دسترسی اجرا می‌شود

اولین دستورهای شناسایی سرور

بعد از ورود به هر سرور جدید، این دستورها تصویر کاملی از آن می‌دهند (خروجی‌های واقعی):

hostnamectl و uptimeLIVE • سرور واقعی
hostnamectl و uptime12
  1. 1hostnamectl — نام میزبان، نوع مجازی‌سازی (KVM)، سیستم‌عامل و کرنل
  2. 2uptime — مدت روشن بودن سرور و میانگین بار
df، free، ip و ssLIVE • سرور واقعی
df، free، ip و ss1234
  1. 1df -h — فضای دیسک: ۳۸ گیگ که ۸٪ آن پر است
  2. 2free -h — حافظه: ۱٫۹ گیگ رم، بدون Swap
  3. 3ip -br a — آدرس‌های شبکه به‌صورت خلاصه
  4. 4ss -tlnp — پورت‌های در حال گوش دادن: SSH روی ۲۲. عبارت systemd pid=1 یعنی SSH با socket activation کار می‌کند
دستورکاربرد
hostnamectlمشخصات سیستم‌عامل، کرنل و مجازی‌سازی
uptimeزمان روشن بودن و بار CPU در ۱، ۵ و ۱۵ دقیقه‌ی اخیر
df -hفضای پارتیشن‌ها با واحد خوانا (G/M)
free -hوضعیت RAM و Swap
ip -br aکارت‌های شبکه و آدرس‌های IPv4/IPv6
ss -tlnpپورت‌های TCP باز و برنامه‌ی صاحب هر پورت
sshd -Tتنظیمات نهایی و مؤثر SSH (بعد از همه‌ی include ها)
نکته‌ی Ubuntu 22.10 به بعد: SSH با ssh.socket مدیریت می‌شود. اگر پورت را در sshd_config تغییر دهید، فقط systemctl restart ssh کافی نیست؛ باید ابتدا systemctl daemon-reload و سپس systemctl restart ssh.socket را اجرا کنید.
۰۸
Session › Logging

Logging — ثبت خروجی جلسه در فایل

برای مستندسازی، گرفتن بکاپ از show running-config یا عیب‌یابی، بهترین کار ثبت کل خروجی در یک فایل است.

Logging
Logging1234
  1. 1Session logging — None: خاموش. Printable output: فقط متن قابل‌خواندن (پیشنهادی). All session output: همه‌چیز حتی کدهای کنترلی. گزینه‌های SSH packets فقط برای اشکال‌زدایی پروتکل.
  2. 2Log file name — مسیر فایل. با متغیرها نام پویا بسازید: &H_&Y&M&D_&T.log = نام میزبان + تاریخ + ساعت.
  3. 3اگر فایل وجود داشت — بازنویسی، افزودن به انتها، یا هر بار پرسیدن.
  4. 4Omit known password fields — حتماً روشن بماند تا رمزها در لاگ ذخیره نشوند.
پیشنهاد عملی: Printable output + نام فایل C:\Logs\&H_&Y-&M-&D_&T.log را روی Default Settings ذخیره کنید. از این به بعد از هر جلسه یک سند خودکار دارید.
۰۹
Terminal

Terminal — رفتار صفحه‌ی ترمینال

Terminal
Terminal123
  1. 1Auto wrap mode — خطوط بلند به خط بعد می‌شکنند. معمولاً روشن بماند.
  2. 2Local echo — آیا کاراکترهای تایپ‌شده را خود PuTTY نمایش دهد؟ Auto را نگه دارید؛ اگر حروف دوتایی دیدید Force off کنید.
  3. 3Local line editing — ارسال خط‌به‌خط به جای کاراکتربه‌کاراکتر. برای SSH روی Auto بماند.

Keyboard — کلیدها

Terminal › Keyboard
Terminal › Keyboard123
  1. 1Backspace key — اگر Backspace در دستگاهی به‌جای پاک‌کردن کاراکتر ^H یا ^? چاپ کرد، این گزینه را عوض کنید.
  2. 2Function keys — اگر F1 تا F12 در برنامه‌هایی مثل mc یا htop کار نکرد، Xterm R6 یا Linux را امتحان کنید.
  3. 3Numeric keypad — رفتار کیبورد عددی در برنامه‌ها.

Bell — زنگ ترمینال

Terminal › Bell
Terminal › Bell12
  1. 1Action — صدای بوق مزاحم است؟ روی Visual bell یا None بگذارید (مثلاً هنگام Tab در سوئیچ‌ها).
  2. 2Overload — اگر زنگ‌ها پشت‌سرهم تکرار شوند، موقتاً غیرفعال می‌شوند.

Features — قابلیت‌های پیشرفته

Terminal › Features
Terminal › Features12
  1. 1غیرفعال‌سازی قابلیت‌هایی که سرور می‌تواند کنترل کند (تغییر اندازه، عنوان پنجره و…). فقط هنگام بروز مشکل خاص تغییر دهید.
  2. 2Response to remote title query — به دلایل امنیتی روی Empty string بماند.
۱۰
Window

Window — اندازه، ظاهر و رفتار پنجره

Window
Window123
  1. 1Columns / Rows — اندازه‌ی اولیه‌ی پنجره بر حسب کاراکتر. ۱۲۰×۳۵ برای خروجی‌های عریض سیسکو راحت‌تر است.
  2. 2When window is resized — با بزرگ‌کردن پنجره، تعداد سطر و ستون زیاد شود یا فونت بزرگ شود.
  3. 3Lines of scrollback — تعداد خطوطی که می‌توانید به عقب اسکرول کنید. ۲۰۰۰ کم است؛ برای show tech مقدار 20000 یا بیشتر بگذارید.

Appearance — فونت و نشانگر

Window › Appearance
Window › Appearance123
  1. 1Cursor appearance — شکل نشانگر: بلوکی، زیرخط یا خط عمودی.
  2. 2Change… — تغییر فونت. Consolas یا Cascadia Mono با اندازه‌ی ۱۱–۱۲ خواناتر از Courier New است.
  3. 3Font quality — ClearType نمایش نرم‌تری دارد.

Behaviour — رفتار پنجره

Window › Behaviour
Window › Behaviour123
  1. 1Window title — عنوان دلخواه (مثلاً «سرور اصلی — مراقب باش!») برای تشخیص پنجره‌ها.
  2. 2Warn before closing — قبل از بستن پنجره سؤال بپرسد؛ جلوی قطع ناخواسته را می‌گیرد.
  3. 3Full screen on Alt-Enter — تمام‌صفحه با Alt+Enter.

Translation — کدگذاری کاراکترها

Window › Translation
Window › Translation12
  1. 1Remote character set — روی UTF-8 باشد تا متن فارسی و کاراکترهای خاص درست نمایش داده شوند.
  2. 2Line drawing — اگر کادرهای برنامه‌هایی مثل mc به شکل حروف عجیب دیدید، این بخش را تغییر دهید.

Selection — کپی و پیست

Window › Selection
Window › Selection123
  1. 1Action of mouse buttons — در حالت پیش‌فرض: انتخاب متن = کپی خودکار و کلیک راست = پیست.
  2. 2Auto-copy — متن انتخاب‌شده خودکار در کلیپ‌بورد ویندوز می‌رود.
  3. 3Ctrl+Shift+C/V — اگر به میانبرهای معمول عادت دارید، این گزینه را روی System clipboard بگذارید.
مراقب کلیک راست باشید! در PuTTY کلیک راست یعنی پیست فوری. اگر در کلیپ‌بورد چند خط دستور باشد، همه بلافاصله روی دستگاه اجرا می‌شوند. روی تجهیزات حساس قبل از کلیک راست محتوای کلیپ‌بورد را چک کنید.

Colours — رنگ‌ها

Window › Colours
Window › Colours123
  1. 1ANSI / 256 / 24-bit — پشتیبانی از رنگ‌های خروجی برنامه‌ها؛ روشن بمانند.
  2. 2لیست رنگ‌ها — یک مورد (مثلاً Default Background) را انتخاب کنید…
  3. 3…و با Modify رنگ دلخواه بگذارید. ترفند: برای سرورهای Production پس‌زمینه‌ی قرمز تیره بگذارید تا اشتباه نکنید.
۱۱
Connection

Connection — تنظیمات اتصال

Connection
Connection123
  1. 1Seconds between keepalives — اگر جلسه پس از چند دقیقه بیکاری قطع می‌شود، این را روی 30 تا 60 بگذارید. مفیدترین تنظیم این صفحه!
  2. 2Nagle's algorithm — غیرفعال بماند تا تایپ بدون تأخیر باشد.
  3. 3Internet protocol — Auto، یا اجبار به IPv4 / IPv6.

Data — نام کاربری خودکار

Connection › Data
Connection › Data123
  1. 1Auto-login username — نام کاربری را اینجا بنویسید تا دیگر login as: پرسیده نشود.
  2. 2Terminal-type string — معمولاً xterm؛ برای رنگ بیشتر xterm-256color.
  3. 3Environment variables — ارسال متغیرهای محیطی به سرور (در صورت پشتیبانی).

Proxy — عبور از پراکسی

Connection › Proxy
Connection › Proxy123
  1. 1Proxy type — HTTP، SOCKS 4/5، Telnet، یا Local (اجرای یک دستور). برای Jump Host از نوع SSH استفاده کنید.
  2. 2Proxy hostname / Port — آدرس و پورت پراکسی.
  3. 3Username / Password — اگر پراکسی احراز هویت می‌خواهد.
۱۲
Connection › SSH

SSH — قلب امنیت PuTTY

Connection › SSH
Connection › SSH123
  1. 1Remote command — دستوری که بلافاصله پس از ورود اجرا شود (مثلاً top).
  2. 2Enable compression — روی لینک‌های کند (VPN، اینترنت ضعیف) سرعت را بالا می‌برد.
  3. 3SSH protocol version — همیشه 2. نسخه‌ی ۱ ناامن است.

Kex — تبادل کلید

SSH › Kex
SSH › Kex12
  1. 1ترتیب الگوریتم‌ها — PuTTY از بالا به پایین امتحان می‌کند. نسخه‌ی جدید حتی الگوریتم‌های مقاوم در برابر کوانتوم (ML-KEM) را دارد.
  2. 2Rekey — بعد از ۶۰ دقیقه یا ۱ گیگابایت کلید جلسه تعویض می‌شود.
خطای رایج با سوئیچ‌های قدیمی سیسکو: پیام Couldn't agree a key exchange algorithm. راه‌حل: در همین لیست، Diffie-Hellman group 1 یا group 14 را بالای خط -- warn below here -- ببرید (با Up). بهتر از آن: IOS دستگاه را به‌روز کنید.

Host keys — کلیدهای میزبان

SSH › Host keys
SSH › Host keys123
  1. 1ترتیب ترجیح الگوریتم‌ها — Ed25519 بهترین گزینه است.
  2. 2کلیدهای دستی — اثرانگشت مورد اعتماد را از قبل وارد کنید تا هشدار نیاید.
  3. 3Configure host CAs — برای سازمان‌هایی که از گواهی SSH استفاده می‌کنند.

Cipher — رمزنگاری

SSH › Cipher
SSH › Cipher12
  1. 1ترتیب رمزها — AES و ChaCha20 امن هستند. هر چیزی زیر warn below here باشد، هنگام استفاده هشدار می‌دهد.
  2. 2single-DES — هرگز فعال نکنید مگر برای دستگاه بسیار قدیمی و آن هم موقت.

Auth — روش‌های احراز هویت

SSH › Auth
SSH › Auth123
  1. 1Pre-authentication banner — نمایش بنر هشدار قبل از ورود (مثلاً banner login سیسکو).
  2. 2Pageant — استفاده از کلیدهای بارگذاری‌شده در Pageant.
  3. 3Agent forwarding — استفاده از کلیدتان روی سرور دوم از طریق سرور اول. فقط روی سرورهای مورد اعتماد.

Credentials — ورود با کلید خصوصی (بدون رمز)

SSH › Auth › Credentials
SSH › Auth › Credentials12
  1. 1Private key file — با Browse فایل .ppk را انتخاب کنید.
  2. 2Certificate — فقط اگر سازمان از گواهی SSH استفاده می‌کند.
فایل .pem دارید؟ PuTTY مستقیم فایل .pem (مثلاً کلید سرورهای ابری) را قبول نمی‌کند. PuTTYgen را باز کنید ← Load ← فایل pem را انتخاب کنید ← Save private key تا فایل .ppk ساخته شود. حالا همین ppk را اینجا بدهید.

TTY، X11 و Tunnels

SSH › TTY
SSH › TTY1
  1. 1Terminal modes — تنظیمات سطح پایین ترمینال. معمولاً دست نزنید.
SSH › X11
SSH › X1112
  1. 1Enable X11 forwarding — اجرای برنامه‌های گرافیکی لینوکس و نمایش روی ویندوز (به یک X Server مثل VcXsrv نیاز دارد).
  2. 2X display location — معمولاً localhost:0.
SSH › Tunnels
SSH › Tunnels1234
  1. 1Source port — پورت محلی روی سیستم شما، مثلاً 8443.
  2. 2Destination — مقصد از دید سرور، مثلاً 10.0.0.5:443.
  3. 3Local / Remote / Dynamic — نوع تونل. Dynamic یک پراکسی SOCKS می‌سازد.
  4. 4Add — حتماً بزنید تا تونل به لیست اضافه شود، بعد Open.
مثال واقعی Port Forwarding: پنل وب iLO یا یک دوربین فقط از داخل شبکه در دسترس است ولی شما به یک سرور لینوکسی در آن شبکه SSH دارید. Source port = 8443، Destination = 192.168.10.20:443، Local، Add، و اتصال. حالا در مرورگر خودتان https://localhost:8443 را باز کنید.
۱۳
Connection › Serial

Serial — اتصال کنسول به روتر و سوئیچ

برای پیکربندی اولیه‌ی دستگاه سیسکو (که هنوز IP ندارد) یا بازیابی رمز، باید با کابل کنسول (Rollover یا USB-to-Serial) وصل شوید.

Connection › Serial
Connection › Serial123
  1. 1Serial line — شماره‌ی پورت COM. از Device Manager ← Ports (COM & LPT) پیدا کنید (مثلاً COM3).
  2. 2Speed — برای سیسکو 9600. سایر تنظیمات: 8 Data bits، 1 Stop bit، Parity: None.
  3. 3Flow control — برای سیسکو روی None بگذارید؛ XON/XOFF گاهی باعث قفل شدن ترمینال می‌شود.
  1. کابل کنسول را به پورت Console دستگاه و USB لپ‌تاپ وصل کنید.
  2. در Device Manager شماره‌ی COM را ببینید (اگر نیست، درایور مبدل USB را نصب کنید).
  3. در صفحه‌ی Session نوع اتصال را Serial کنید، Serial line = COM3، Speed = 9600.
  4. در Connection › Serial، Flow control = None.
  5. Open بزنید و یک‌بار Enter را فشار دهید تا prompt ظاهر شود.
صفحه سیاه ماند؟ Enter را چند بار بزنید. اگر کاراکترهای درهم دیدید، سرعت اشتباه است (۱۱۵۲۰۰ را امتحان کنید). اگر اصلاً چیزی نیامد، شماره‌ی COM یا کابل را بررسی کنید.

Telnet

Connection › Telnet
Connection › Telnet12
  1. 1Negotiation mode — Active پیش‌فرض است. اگر برخی دستگاه‌ها اتصال را نپذیرفتند، Passive را امتحان کنید.
  2. 2Return key — ارسال Telnet New Line با Enter.
Telnet رمزنگاری ندارد. نام کاربری و رمز به صورت متن ساده روی شبکه می‌رود و با Wireshark قابل خواندن است. فقط در آزمایشگاه یا شبکه‌ی ایزوله استفاده کنید و روی تجهیزات واقعی SSH را فعال کنید.
۱۴
PuTTYgen

ساخت کلید SSH با PuTTYgen

ورود با کلید هم امن‌تر از رمز است و هم سریع‌تر. مراحل کامل:

  1. PuTTYgen را از منوی Start باز کنید.
  2. پایین پنجره نوع کلید را EdDSA (Ed25519) بگذارید (یا RSA با ۴۰۹۶ بیت برای دستگاه‌های قدیمی).
  3. روی Generate کلیک کنید و ماوس را در کادر خالی تکان دهید تا تصادفی‌سازی تمام شود.
  4. در Key passphrase یک عبارت عبور قوی بگذارید (اختیاری ولی توصیه‌شده).
  5. Save private key → فایل mykey.ppk را جای امنی ذخیره کنید.
  6. متن کادر بالایی (Public key for pasting into OpenSSH authorized_keys) را کپی کنید.
  7. روی سرور لینوکسی آن را به انتهای فایل ~/.ssh/authorized_keys اضافه کنید.
  8. در PuTTY: Connection › SSH › Auth › Credentials → فایل ppk را انتخاب کنید، به Session برگردید و Save کنید.
# روی سرور لینوکس
mkdir -p ~/.ssh && chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys      # کلید عمومی را پیست کنید
chmod 600 ~/.ssh/authorized_keys
Pageant: اگر روی کلید Passphrase گذاشته‌اید و نمی‌خواهید هر بار وارد کنید، Pageant را اجرا کنید، روی آیکن آن در System Tray کلیک راست ← Add Key. تا وقتی ویندوز روشن است، PuTTY خودکار از آن استفاده می‌کند.
۱۵
حرفه‌ای

ابزارهای خط فرمان: pscp و plink

برای انتقال فایل و اتوماسیون، از ابزارهای خط فرمان همراه PuTTY در CMD یا PowerShell استفاده کنید:

# ارسال فایل به سرور
pscp C:\backup\config.txt [email protected]:/home/admin/

# دریافت فایل از سرور
pscp [email protected]:/var/log/syslog D:\logs\

# استفاده از نشست ذخیره‌شده (با همه‌ی تنظیماتش)
pscp -load "Core-Server" file.zip :/tmp/

# اجرای یک دستور روی سرور و دیدن خروجی
plink -ssh [email protected] -i C:\keys\mykey.ppk "df -h"

# باز کردن مستقیم PuTTY با یک نشست ذخیره‌شده (برای میانبر دسکتاپ)
putty.exe -load "Core-Switch"

# اتصال سریع سریال از خط فرمان
putty.exe -serial COM3 -sercfg 9600,8,n,1,N
میانبر یک‌کلیکی: روی دسکتاپ یک Shortcut به putty.exe بسازید و در Target انتهای آن -load "نام نشست" را اضافه کنید. با دوبار کلیک مستقیم به دستگاه وصل می‌شوید.
۱۶
Advanced Lab

پروژه‌ی واقعی: یوزر تونل SSH برای NetMod با پورت و سهمیه‌ی حجم

در این پروژه برای سرور یک کاربر جدید می‌سازیم که فقط بتواند با نرم‌افزارهایی مثل NetMod از طریق SSH تونل بزند، با این مشخصات:

کاربر محدودnetuser بدون Shell؛ هیچ دستوری نمی‌تواند اجرا کند
پورت اختصاصی2222 — پورت ۲۲ مدیر دست‌نخورده می‌ماند
ورود با رمزفقط برای این کاربر و فقط روی ۲۲۲۲؛ root همچنان فقط با کلید
سهمیه‌ی حجم۵۰ گیگابایت با nftables؛ پس از اتمام، اینترنت کاربر قطع می‌شود
قانون طلایی تغییر تنظیمات SSH: تا پایان کار پنجره‌ی PuTTY فعلی را نبندید و قبل از هر ری‌استارت، تنظیمات را با sshd -t تست کنید. اتصال‌های باز با ری‌استارت SSH قطع نمی‌شوند و اگر اشتباهی رخ دهد، از همین پنجره قابل اصلاح است.

گام ۰ — بررسی وضعیت فعلی (فقط خواندنی)

sshd -T | grep -Ei '^(port|passwordauthentication|kbdinteractiveauthentication|authenticationmethods|allowtcpforwarding|usepam) '
ls /etc/ssh/sshd_config.d/
ufw status
nft list tables
ss -tlnp | grep -E ':(2222|8443) '
خروجی بررسیLIVE • سرور واقعی
خروجی بررسی12
  1. 1passwordauthentication no — ورود با رمز به‌طور سراسری بسته است (و می‌ماند)
  2. 2فایروال ufw غیرفعال است و پورت ۲۲۲۲ آزاد است

گام ۱ — ساخت کاربر بدون Shell

useradd -M -s /usr/sbin/nologin netuser
passwd netuser          # enter a strong password twice
اشتباه رایج: passwd netuser123456 ننویسید! دستور فقط passwd netuser است و رمز را خود سیستم جداگانه می‌پرسد. همچنین رمزهایی مثل 123456 روی پورتی که به اینترنت باز است ظرف چند ساعت توسط ربات‌ها شکسته می‌شوند؛ حداقل ۱۲ کاراکتر ترکیبی.

گام ۲ — اضافه کردن پورت ۲۲۲۲ و قوانین اختصاصی کاربر

printf 'Port 22\nPort 2222\n' > /etc/ssh/sshd_config.d/10-ports.conf

cat >> /etc/ssh/sshd_config <<'EOF'

# ---- HOPA: netuser = tunnel only, password login only on port 2222 ----
Match User netuser LocalPort 2222
    PasswordAuthentication yes
    AllowTcpForwarding local
    PermitTTY no
    X11Forwarding no
    AllowAgentForwarding no
    PermitTunnel no
    GatewayPorts no
EOF
تنظیماثر
Port 22 + Port 2222هر دو پورت فعال؛ اگر Port 22 را ننویسید، پورت ۲۲ بسته می‌شود و دسترسی خودتان قطع می‌شود!
Match User netuser LocalPort 2222قوانین زیر فقط وقتی اعمال می‌شوند که netuser از پورت ۲۲۲۲ وارد شود
PasswordAuthentication yesورود با رمز فقط برای همین کاربر و همین پورت
AllowTcpForwarding localاجازه‌ی تونل (چیزی که NetMod لازم دارد)
PermitTTY no و Shell = nologinهیچ ترمینال یا دستوری روی سرور ندارد
GatewayPorts، PermitTunnel، X11، Agent = noبستن بقیه‌ی قابلیت‌هایی که لازم ندارد

گام ۳ — سهمیه‌ی حجم با nftables

cat > /etc/nftables-netuser.nft <<'EOF'
table inet netuser_quota
delete table inet netuser_quota
table inet netuser_quota {
  quota netuser_q { over 51200 mbytes }
  chain out {
    type filter hook output priority 0; policy accept;
    meta skuid netuser ct mark set 0x2222
    ct mark 0x2222 quota name "netuser_q" drop
  }
  chain in {
    type filter hook input priority 0; policy accept;
    ct mark 0x2222 quota name "netuser_q" drop
  }
}
EOF
چطور کار می‌کند؟ وقتی NetMod سایتی را باز می‌کند، اتصال از سرور به آن سایت توسط پردازه‌ای با شناسه‌ی کاربر netuser ساخته می‌شود. قانون اول (meta skuid) این اتصال‌ها را علامت (ct mark) می‌زند و بسته‌های رفت (output) و برگشت (input) هر دو از شمارنده‌ی netuser_q کم می‌کنند. وقتی مصرف از ۵۰ گیگ بیشتر شد، بسته‌ها drop می‌شوند.

برای اینکه قوانین بعد از ری‌استارت سرور هم بارگذاری شوند، یک سرویس systemd می‌سازیم:

cat > /etc/systemd/system/netuser-quota.service <<'EOF'
[Unit]
Description=Traffic quota for netuser
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/nft -f /etc/nftables-netuser.nft
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now netuser-quota.service

یک خطای واقعی: واحد gbytes!

در اجرای اول، فایل را با over 50 gbytes نوشته بودیم و سرویس بالا نیامد. با nft -c -f (حالت بررسی بدون اعمال) علت مشخص شد:

nft -c -f — بررسی فایل قوانینLIVE • سرور واقعی
nft -c -f — بررسی فایل قوانین12
  1. 1Wrong unit format, expecting bytes, kbytes or mbytes — nftables واحد گیگابایت ندارد!
  2. 2یک خطا باعث شد بقیه‌ی خطوط هم خطای syntax بدهند؛ همیشه اولین خطا را اصلاح کنید
# fix: 50 GB = 50 x 1024 = 51200 MB
sed -i 's/over 50 gbytes/over 51200 mbytes/' /etc/nftables-netuser.nft
nft -c -f /etc/nftables-netuser.nft && echo NFT-OK
systemctl restart netuser-quota.service

گام ۴ — تست و فعال‌سازی امن

sshd -t && echo "CONFIG-OK" && systemctl daemon-reload && systemctl restart ssh.socket && systemctl restart ssh.service && ss -tlnp | grep ssh

زنجیره‌ی && یعنی هر دستور فقط وقتی اجرا می‌شود که قبلی موفق بوده؛ اگر sshd -t خطا بدهد، هیچ ری‌استارتی انجام نمی‌شود.

SSH روی دو پورتLIVE • سرور واقعی
SSH روی دو پورت12
  1. 1CONFIG-OK — تنظیمات سالم است
  2. 2پورت 2222 روی IPv4 و IPv6 در کنار پورت ۲۲ فعال شد
بررسی نهاییLIVE • سرور واقعی
بررسی نهایی123
  1. 1سرویس سهمیه active
  2. 2سهمیه‌ی over 51200 mbytes ثبت شد
  3. 3passwd -S: حرف P یعنی رمز تنظیم شده است

گام ۵ — اتصال با NetMod

فیلد در NetModمقدار
نوعSSH (Direct)
SSH Host46.249.xxx.xxx
SSH Port2222
Usernamenetuser
Passwordرمزی که با passwd تعیین شد
NetMod — اتصال موفقLIVE • سرور واقعی
NetMod — اتصال موفق12
  1. 1پروفایل test1 روی پورت ۲۲۲۲ — نوار رنگی کنار آن یعنی متصل است
  2. 2زمان اتصال فعال

دستورهای مدیریت روزانه

کاردستور
دیدن حجم مصرفیnft list quota inet netuser_quota netuser_q
صفر کردن شمارنده (دوره‌ی جدید)nft reset quota inet netuser_quota netuser_q
تغییر حجم (مثلاً ۱۰۰ گیگ)sed -i 's/over [0-9]* mbytes/over 102400 mbytes/' /etc/nftables-netuser.nft && systemctl restart netuser-quota
قطع موقت کاربرusermod -L netuser — وصل مجدد: usermod -U netuser
تغییر رمز کاربرpasswd netuser
دیدن اتصال‌های فعال کاربرps -u netuser -f یا ss -tnp | grep sshd
لاگ ورودهاjournalctl -u ssh -n 50 --no-pager
حذف کامل کاربر و قوانینsystemctl disable --now netuser-quota; nft delete table inet netuser_quota; userdel netuser و حذف بلوک Match از sshd_config
محدودیت‌ها و نکات امنیتی:
  • شمارنده‌ی حجم در حافظه است و با ری‌استارت سرور صفر می‌شود؛ برای حسابداری دقیق از ابزارهایی مثل vnStat یا پنل‌های اختصاصی استفاده کنید.
  • اگر ارائه‌دهنده‌ی سرور فایروال پنلی (Security Group) دارد، پورت 2222/TCP را آنجا هم باز کنید.
  • پورت باز با ورود رمزی هدف حملات brute-force است؛ نصب fail2ban (apt install fail2ban) را جدی بگیرید.
  • برای چند کاربر، برای هر کدام یک quota و یک ct mark جداگانه بسازید.
  • استفاده از سرور باید مطابق قوانین ارائه‌دهنده‌ی سرور و قوانین محل استفاده باشد.
۱۷
ترفندها

میانبرها و ترفندهای داخل ترمینال

کارروش
کپیفقط متن را با ماوس انتخاب کنید (خودکار کپی می‌شود)
پیستکلیک راست، یا Shift+Insert
اسکرول به عقبShift+PgUp / Shift+PgDn
انتخاب مستطیلیAlt + کشیدن ماوس
منوی سیستم (تنظیمات حین اتصال)کلیک راست روی نوار عنوان پنجره
تغییر تنظیمات حین اتصالمنوی عنوان ← Change Settings…
اتصال مجدد پس از قطعمنوی عنوان ← Restart Session
کپی تمام خروجیمنوی عنوان ← Copy All to Clipboard
پاک‌کردن صفحه و تاریخچهمنوی عنوان ← Clear Scrollback
ارسال Break (بازیابی رمز سیسکو)منوی عنوان ← Special Command ← Break
تمام‌صفحهAlt+Enter (اگر در Behaviour فعال باشد)
بازیابی رمز روتر سیسکو: در اتصال Serial، دستگاه را خاموش/روشن کنید و در ۶۰ ثانیه‌ی اول از منوی عنوان Special Command ← Break را بزنید تا وارد ROMMON شوید.
منوی سیستم پنجره‌ی PuTTY (کلیک روی آیکن بالا-چپ)LIVE • سرور واقعی
منوی سیستم پنجره‌ی PuTTY (کلیک روی آیکن بالا-چپ)123456
  1. 1Event Log — گزارش مراحل اتصال؛ اولین جا برای عیب‌یابی
  2. 2New Session — باز کردن پنجره‌ی تنظیمات جدید
  3. 3Restart Session — اتصال دوباره پس از قطع شدن
  4. 4Duplicate Session — یک پنجره‌ی دیگر با همین تنظیمات
  5. 5Change Settings — تغییر تنظیمات حین اتصال (برخی گزینه‌ها مثل کلید قابل تغییر نیستند)
  6. 6Copy All to Clipboard — کپی کل خروجی

تصویر واقعی از جلسه‌ی کاری روی سرور

۱۸
Troubleshooting

عیب‌یابی خطاهای رایج

پیام خطامعنیراه‌حل
Network error: Connection refusedدستگاه در دسترس است ولی سرویس روی آن پورت گوش نمی‌دهدپورت را چک کنید؛ SSH روی دستگاه فعال است؟ (ip ssh version 2 و transport input ssh در سیسکو)
Network error: Connection timed outهیچ پاسخی نیامدIP اشتباه، فایروال، یا مسیر شبکه. با ping و tracert بررسی کنید
Couldn't agree a key exchange algorithmدستگاه قدیمی، الگوریتم‌های جدید را نمی‌شناسدSSH › Kex: الگوریتم قدیمی را بالای خط warn ببرید، یا IOS را به‌روز کنید
Server refused our keyکلید عمومی روی سرور نیست یا دسترسی فایل غلط استauthorized_keys و دسترسی‌های 700/600 را چک کنید
Access deniedنام کاربری یا رمز اشتباهCaps Lock، زبان کیبورد، و Auto-login username در Data را چک کنید
قطع شدن بعد از چند دقیقه بیکاریفایروال/NAT اتصال بی‌کار را می‌بنددConnection › Keepalives = 30
کاراکترهای درهم در Serialسرعت نامطابقSpeed را 9600 یا 115200 بگذارید
فارسی یا خطوط کادر خراب نمایش داده می‌شوندکدگذاری نامطابقWindow › Translation = UTF-8
Unable to open serial portپورت COM اشغال یا اشتباه استبرنامه‌های دیگر (مثلاً SecureCRT) را ببندید؛ COM را در Device Manager چک کنید
۱۹
امنیت

چک‌لیست امنیتی و جمع‌بندی

خلاصه در یک نگاه

اتصال سریعSession ← IP ← SSH ← Open
قطع نشدنConnection ← Keepalives = 30
ورود با کلیدSSH ← Auth ← Credentials ← ppk
کنسول سیسکوSerial ← COMx ← 9600 ← Flow: None