PuTTY چیست و چرا مهم است؟
PuTTY یک کلاینت رایگان و متنباز برای ویندوز است که با آن میتوانید از راه دور به سرورها، روترها، سوئیچها، فایروالها و هر دستگاهی که خط فرمان دارد وصل شوید. برای یک کارشناس شبکه و IT، PuTTY همان «آچار فرانسه»ی روزمره است: SSH به سرور لینوکسی، Telnet به یک سوئیچ قدیمی سیسکو، یا اتصال کنسول (Serial) به روتری که تازه از جعبه درآمده.
putty.exe— کلاینت اصلی (موضوع این آموزش)puttygen.exe— ساخت و تبدیل کلید SSH (فرمت .ppk)pageant.exe— نگهدارندهی کلیدها در حافظه (SSH Agent)pscp.exeوpsftp.exe— انتقال فایل از طریق SSHplink.exe— نسخهی خط فرمانی PuTTY برای اسکریپتنویسی
دانلود، نصب و اجرای اولیه
- دانلود فقط از سایت رسمی:
https://www.chiark.greenend.org.uk/~sgtatham/putty/— نسخهی MSI 64-bit را بگیرید. از سایتهای ناشناس دانلود نکنید؛ نسخههای آلودهی PuTTY برای سرقت رمز سرورها شناختهشدهاند. - نصب: فایل MSI را اجرا کنید و Next بزنید. بهطور پیشفرض در
C:\Program Files\PuTTYنصب میشود (روی سیستم شما هم همینجاست). - اجرا: از منوی Start عبارت PuTTY را جستجو کنید. پنجرهی PuTTY Configuration باز میشود — همهی تنظیمات از همینجا انجام میشود.
1- 1پنجرهی تنظیمات PuTTY؛ سمت چپ درخت دستهها، سمت راست تنظیمات همان دسته
نمای واقعی از اجرای PuTTY روی همین سیستم
صفحهی Session — مهمترین صفحه
۹۰٪ کار روزمره فقط با همین صفحه انجام میشود: آدرس را وارد کنید، نوع اتصال را انتخاب کنید و Open بزنید.
1234567- 1Host Name (or IP address) — آدرس IP یا نام دستگاه مقصد. میتوانید
[email protected]هم بنویسید تا نام کاربری خودکار پر شود. - 2Port — با تغییر نوع اتصال خودکار عوض میشود: SSH=22، Telnet=23. اگر سرور روی پورت دیگری است اینجا عوض کنید.
- 3Connection type — SSH (امن)، Serial (کنسول) یا Other برای Telnet/Rlogin/Raw.
- 4Saved Sessions — یک نام بنویسید (مثلاً
Core-Switch) تا همهی تنظیمات فعلی با این نام ذخیره شود. - 5Load / Save / Delete — بارگذاری، ذخیره و حذف نشستها. دوبار کلیک روی یک نشست ذخیرهشده = اتصال مستقیم.
- 6Close window on exit — رفتار پنجره پس از قطع اتصال. «Never» برای دیدن پیام خطا مفید است.
- 7Open — شروع اتصال.
اولین اتصال SSH، قدمبهقدم
- در Host Name آدرس سرور را بنویسید، مثلاً
192.168.1.10. - Connection type روی SSH و Port روی 22 باشد.
- Open را بزنید.
- در اولین اتصال هشدار Security Alert دربارهی کلید میزبان (Host Key) میآید. اگر به سرور اعتماد دارید Accept بزنید تا اثرانگشت آن ذخیره شود.
- جلوی
login as:نام کاربری و بعد رمز را وارد کنید. (هنگام تایپ رمز هیچ کاراکتری نمایش داده نمیشود؛ طبیعی است.)
ترفند ذخیرهی نشست بهصورت حرفهای
ترتیب درست این است: اول همهی تنظیمات (رنگ، فونت، کلید، Keepalive و…) را در صفحههای دیگر انجام دهید، بعد به Session برگردید، نام را بنویسید و Save بزنید. اگر Default Settings را انتخاب و Save کنید، تنظیمات شما پیشفرض همهی اتصالهای جدید میشود.
مثال واقعی ۱: اتصال به سرور مجازی شرکت
46.249.xxx.xxx. همهی تصاویر این بخش و بخشهای بعدی از یک جلسهی کاری واقعی روی همین سرور گرفته شدهاند، همراه با خطاها و راهحلهایشان، دقیقاً همانطور که در دنیای واقعی پیش میآید. آدرس IP در نسخهی عمومی به دلایل امنیتی مخدوش شده است.قدم ۱ — وارد کردن آدرس سرور
123- 1آدرس IP سرور:
46.249.xxx.xxx - 2نوع اتصال SSH و پورت ۲۲ (پیشفرض)
- 3زدن Open برای شروع اتصال
قدم ۲ — هشدار کلید میزبان و صفحهی ورود
در اولین اتصال به هر سرور، پنجرهی PuTTY Security Alert باز میشود و اثرانگشت کلید سرور را نشان میدهد. با Accept این اثرانگشت در رجیستری ویندوز ذخیره میشود و دفعات بعد دیگر سؤالی پرسیده نمیشود. در جلسهی ما چون قبلاً به این سرور وصل شده بودیم، هشدار نیامد و مستقیم به صفحهی ورود رسیدیم:
1- 1
login as:— سرور منتظر نام کاربری است. عنوان پنجره هم آدرس سرور را نشان میدهد.
قدم ۳ — یک خطای واقعی و آموزنده!
نام کاربری root را وارد کردیم و بلافاصله این خطا ظاهر شد:
1- 1No supported authentication methods available (server sent: publickey)
مثال واقعی ۲: تبدیل کلید .pem به .ppk با PuTTYgen
ارائهدهندهی سرور یک فایل private-key-file.pem (فرمت OpenSSH) داده بود. PuTTY فقط فرمت خودش یعنی .ppk را میخواند، پس باید با PuTTYgen تبدیلش کنیم:
123- 1Load — بارگذاری کلید خصوصی موجود (کار ما همین است)
- 2Generate — ساخت جفتکلید کاملاً جدید
- 3نوع کلید برای ساخت کلید جدید: RSA، ECDSA، EdDSA (پیشنهادی)
123- 1مهم: فیلتر را روی All Files (*.*) بگذارید، وگرنه فایل pem دیده نمیشود!
- 2فایل
private-key-file.pemدر پوشهی Downloads - 3Open
1- 1پیام موفقیت: کلید خارجی (OpenSSH) وارد شد؛ برای استفاده در PuTTY باید با Save private key ذخیره شود.
1234- 1کلید عمومی — همین متن است که روی سرور در
~/.ssh/authorized_keysقرار میگیرد - 2Fingerprint — اثرانگشت کلید (RSA 2048 بیتی)
- 3Key passphrase — رمز محافظ فایل کلید (اختیاری ولی پیشنهادی)
- 4Save private key — ذخیره با فرمت ppk
1- 1PuTTYgen هشدار میدهد کلید بدون رمز محافظ ذخیره میشود. ما Yes زدیم چون فایل اصلی هم بیرمز بود؛ در محیط واقعی بهتر است Passphrase بگذارید.
12- 1نام فایل:
hopa-server.ppk - 2Save
مثال واقعی ۳: تنظیم کلید و ذخیرهی نشست حرفهای
حالا یک نشست کامل میسازیم تا از این به بعد با یک دوبار کلیک و بدون تایپ هیچ چیزی وارد سرور شویم.
الف) معرفی فایل کلید
12- 1انتخاب
hopa-server.ppk - 2Open
12- 1مسیر کلید در فیلد Private key file for authentication نشست
- 2مسیر در درخت تنظیمات: Connection › SSH › Auth › Credentials
ب) نام کاربری خودکار
1- 1Auto-login username =
root— دیگرlogin as:پرسیده نمیشود
ج) جلوگیری از قطع شدن
1- 1Keepalives = 30 — هر ۳۰ ثانیه یک بستهی خالی تا فایروالها اتصال بیکار را نبندند
د) آدرس و نام نشست، سپس Save
12- 1آدرس سرور
- 2نام نشست:
HOPA-Server
123- 1
HOPA-Serverبه لیست اضافه شد؛ دوبار کلیک = اتصال مستقیم - 2Save — بعد از هر تغییر دوباره بزنید (Load → تغییر → Save)
- 3Open
مثال واقعی ۴: ورود موفق و شناخت سرور
123- 1
Authenticating with public key— ورود با کلید، بدون رمز - 2سیستمعامل: Ubuntu 26.04.1 LTS با کرنل 7.0
- 3خلاصهی وضعیت: بار سیستم، مصرف دیسک و رم، تعداد پردازهها و آدرسها
1- 1
root@srv…:~#— علامت#یعنی کاربر root هستید؛ هر دستوری با بالاترین سطح دسترسی اجرا میشود
اولین دستورهای شناسایی سرور
بعد از ورود به هر سرور جدید، این دستورها تصویر کاملی از آن میدهند (خروجیهای واقعی):
12- 1
hostnamectl— نام میزبان، نوع مجازیسازی (KVM)، سیستمعامل و کرنل - 2
uptime— مدت روشن بودن سرور و میانگین بار
1234- 1
df -h— فضای دیسک: ۳۸ گیگ که ۸٪ آن پر است - 2
free -h— حافظه: ۱٫۹ گیگ رم، بدون Swap - 3
ip -br a— آدرسهای شبکه بهصورت خلاصه - 4
ss -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 ها) |
ssh.socket مدیریت میشود. اگر پورت را در sshd_config تغییر دهید، فقط systemctl restart ssh کافی نیست؛ باید ابتدا systemctl daemon-reload و سپس systemctl restart ssh.socket را اجرا کنید.Logging — ثبت خروجی جلسه در فایل
برای مستندسازی، گرفتن بکاپ از show running-config یا عیبیابی، بهترین کار ثبت کل خروجی در یک فایل است.
1234- 1Session logging — None: خاموش. Printable output: فقط متن قابلخواندن (پیشنهادی). All session output: همهچیز حتی کدهای کنترلی. گزینههای SSH packets فقط برای اشکالزدایی پروتکل.
- 2Log file name — مسیر فایل. با متغیرها نام پویا بسازید:
&H_&Y&M&D_&T.log= نام میزبان + تاریخ + ساعت. - 3اگر فایل وجود داشت — بازنویسی، افزودن به انتها، یا هر بار پرسیدن.
- 4Omit known password fields — حتماً روشن بماند تا رمزها در لاگ ذخیره نشوند.
C:\Logs\&H_&Y-&M-&D_&T.log را روی Default Settings ذخیره کنید. از این به بعد از هر جلسه یک سند خودکار دارید.Terminal — رفتار صفحهی ترمینال
123- 1Auto wrap mode — خطوط بلند به خط بعد میشکنند. معمولاً روشن بماند.
- 2Local echo — آیا کاراکترهای تایپشده را خود PuTTY نمایش دهد؟ Auto را نگه دارید؛ اگر حروف دوتایی دیدید Force off کنید.
- 3Local line editing — ارسال خطبهخط به جای کاراکتربهکاراکتر. برای SSH روی Auto بماند.
Keyboard — کلیدها
123- 1Backspace key — اگر Backspace در دستگاهی بهجای پاککردن کاراکتر
^Hیا^?چاپ کرد، این گزینه را عوض کنید. - 2Function keys — اگر F1 تا F12 در برنامههایی مثل mc یا htop کار نکرد، Xterm R6 یا Linux را امتحان کنید.
- 3Numeric keypad — رفتار کیبورد عددی در برنامهها.
Bell — زنگ ترمینال
12- 1Action — صدای بوق مزاحم است؟ روی Visual bell یا None بگذارید (مثلاً هنگام Tab در سوئیچها).
- 2Overload — اگر زنگها پشتسرهم تکرار شوند، موقتاً غیرفعال میشوند.
Features — قابلیتهای پیشرفته
12- 1غیرفعالسازی قابلیتهایی که سرور میتواند کنترل کند (تغییر اندازه، عنوان پنجره و…). فقط هنگام بروز مشکل خاص تغییر دهید.
- 2Response to remote title query — به دلایل امنیتی روی Empty string بماند.
Window — اندازه، ظاهر و رفتار پنجره
123- 1Columns / Rows — اندازهی اولیهی پنجره بر حسب کاراکتر. ۱۲۰×۳۵ برای خروجیهای عریض سیسکو راحتتر است.
- 2When window is resized — با بزرگکردن پنجره، تعداد سطر و ستون زیاد شود یا فونت بزرگ شود.
- 3Lines of scrollback — تعداد خطوطی که میتوانید به عقب اسکرول کنید. ۲۰۰۰ کم است؛ برای
show techمقدار 20000 یا بیشتر بگذارید.
Appearance — فونت و نشانگر
123- 1Cursor appearance — شکل نشانگر: بلوکی، زیرخط یا خط عمودی.
- 2Change… — تغییر فونت. Consolas یا Cascadia Mono با اندازهی ۱۱–۱۲ خواناتر از Courier New است.
- 3Font quality — ClearType نمایش نرمتری دارد.
Behaviour — رفتار پنجره
123- 1Window title — عنوان دلخواه (مثلاً «سرور اصلی — مراقب باش!») برای تشخیص پنجرهها.
- 2Warn before closing — قبل از بستن پنجره سؤال بپرسد؛ جلوی قطع ناخواسته را میگیرد.
- 3Full screen on Alt-Enter — تمامصفحه با Alt+Enter.
Translation — کدگذاری کاراکترها
12- 1Remote character set — روی UTF-8 باشد تا متن فارسی و کاراکترهای خاص درست نمایش داده شوند.
- 2Line drawing — اگر کادرهای برنامههایی مثل mc به شکل حروف عجیب دیدید، این بخش را تغییر دهید.
Selection — کپی و پیست
123- 1Action of mouse buttons — در حالت پیشفرض: انتخاب متن = کپی خودکار و کلیک راست = پیست.
- 2Auto-copy — متن انتخابشده خودکار در کلیپبورد ویندوز میرود.
- 3Ctrl+Shift+C/V — اگر به میانبرهای معمول عادت دارید، این گزینه را روی System clipboard بگذارید.
Colours — رنگها
123- 1ANSI / 256 / 24-bit — پشتیبانی از رنگهای خروجی برنامهها؛ روشن بمانند.
- 2لیست رنگها — یک مورد (مثلاً Default Background) را انتخاب کنید…
- 3…و با Modify رنگ دلخواه بگذارید. ترفند: برای سرورهای Production پسزمینهی قرمز تیره بگذارید تا اشتباه نکنید.
Connection — تنظیمات اتصال
123- 1Seconds between keepalives — اگر جلسه پس از چند دقیقه بیکاری قطع میشود، این را روی 30 تا 60 بگذارید. مفیدترین تنظیم این صفحه!
- 2Nagle's algorithm — غیرفعال بماند تا تایپ بدون تأخیر باشد.
- 3Internet protocol — Auto، یا اجبار به IPv4 / IPv6.
Data — نام کاربری خودکار
123- 1Auto-login username — نام کاربری را اینجا بنویسید تا دیگر
login as:پرسیده نشود. - 2Terminal-type string — معمولاً
xterm؛ برای رنگ بیشترxterm-256color. - 3Environment variables — ارسال متغیرهای محیطی به سرور (در صورت پشتیبانی).
Proxy — عبور از پراکسی
123- 1Proxy type — HTTP، SOCKS 4/5، Telnet، یا Local (اجرای یک دستور). برای Jump Host از نوع SSH استفاده کنید.
- 2Proxy hostname / Port — آدرس و پورت پراکسی.
- 3Username / Password — اگر پراکسی احراز هویت میخواهد.
SSH — قلب امنیت PuTTY
123- 1Remote command — دستوری که بلافاصله پس از ورود اجرا شود (مثلاً
top). - 2Enable compression — روی لینکهای کند (VPN، اینترنت ضعیف) سرعت را بالا میبرد.
- 3SSH protocol version — همیشه 2. نسخهی ۱ ناامن است.
Kex — تبادل کلید
12- 1ترتیب الگوریتمها — PuTTY از بالا به پایین امتحان میکند. نسخهی جدید حتی الگوریتمهای مقاوم در برابر کوانتوم (ML-KEM) را دارد.
- 2Rekey — بعد از ۶۰ دقیقه یا ۱ گیگابایت کلید جلسه تعویض میشود.
Host keys — کلیدهای میزبان
123- 1ترتیب ترجیح الگوریتمها — Ed25519 بهترین گزینه است.
- 2کلیدهای دستی — اثرانگشت مورد اعتماد را از قبل وارد کنید تا هشدار نیاید.
- 3Configure host CAs — برای سازمانهایی که از گواهی SSH استفاده میکنند.
Cipher — رمزنگاری
12- 1ترتیب رمزها — AES و ChaCha20 امن هستند. هر چیزی زیر warn below here باشد، هنگام استفاده هشدار میدهد.
- 2single-DES — هرگز فعال نکنید مگر برای دستگاه بسیار قدیمی و آن هم موقت.
Auth — روشهای احراز هویت
123- 1Pre-authentication banner — نمایش بنر هشدار قبل از ورود (مثلاً
banner loginسیسکو). - 2Pageant — استفاده از کلیدهای بارگذاریشده در Pageant.
- 3Agent forwarding — استفاده از کلیدتان روی سرور دوم از طریق سرور اول. فقط روی سرورهای مورد اعتماد.
Credentials — ورود با کلید خصوصی (بدون رمز)
12- 1Private key file — با Browse فایل
.ppkرا انتخاب کنید. - 2Certificate — فقط اگر سازمان از گواهی SSH استفاده میکند.
.pem (مثلاً کلید سرورهای ابری) را قبول نمیکند. PuTTYgen را باز کنید ← Load ← فایل pem را انتخاب کنید ← Save private key تا فایل .ppk ساخته شود. حالا همین ppk را اینجا بدهید.TTY، X11 و Tunnels
1- 1Terminal modes — تنظیمات سطح پایین ترمینال. معمولاً دست نزنید.
12- 1Enable X11 forwarding — اجرای برنامههای گرافیکی لینوکس و نمایش روی ویندوز (به یک X Server مثل VcXsrv نیاز دارد).
- 2X display location — معمولاً
localhost:0.
1234- 1Source port — پورت محلی روی سیستم شما، مثلاً
8443. - 2Destination — مقصد از دید سرور، مثلاً
10.0.0.5:443. - 3Local / Remote / Dynamic — نوع تونل. Dynamic یک پراکسی SOCKS میسازد.
- 4Add — حتماً بزنید تا تونل به لیست اضافه شود، بعد Open.
8443، Destination = 192.168.10.20:443، Local، Add، و اتصال. حالا در مرورگر خودتان https://localhost:8443 را باز کنید.Serial — اتصال کنسول به روتر و سوئیچ
برای پیکربندی اولیهی دستگاه سیسکو (که هنوز IP ندارد) یا بازیابی رمز، باید با کابل کنسول (Rollover یا USB-to-Serial) وصل شوید.
123- 1Serial line — شمارهی پورت COM. از Device Manager ← Ports (COM & LPT) پیدا کنید (مثلاً COM3).
- 2Speed — برای سیسکو 9600. سایر تنظیمات: 8 Data bits، 1 Stop bit، Parity: None.
- 3Flow control — برای سیسکو روی None بگذارید؛ XON/XOFF گاهی باعث قفل شدن ترمینال میشود.
- کابل کنسول را به پورت Console دستگاه و USB لپتاپ وصل کنید.
- در Device Manager شمارهی COM را ببینید (اگر نیست، درایور مبدل USB را نصب کنید).
- در صفحهی Session نوع اتصال را Serial کنید، Serial line =
COM3، Speed =9600. - در Connection › Serial، Flow control = None.
- Open بزنید و یکبار Enter را فشار دهید تا prompt ظاهر شود.
Telnet
12- 1Negotiation mode — Active پیشفرض است. اگر برخی دستگاهها اتصال را نپذیرفتند، Passive را امتحان کنید.
- 2Return key — ارسال Telnet New Line با Enter.
ساخت کلید SSH با PuTTYgen
ورود با کلید هم امنتر از رمز است و هم سریعتر. مراحل کامل:
- PuTTYgen را از منوی Start باز کنید.
- پایین پنجره نوع کلید را EdDSA (Ed25519) بگذارید (یا RSA با ۴۰۹۶ بیت برای دستگاههای قدیمی).
- روی Generate کلیک کنید و ماوس را در کادر خالی تکان دهید تا تصادفیسازی تمام شود.
- در Key passphrase یک عبارت عبور قوی بگذارید (اختیاری ولی توصیهشده).
- Save private key → فایل
mykey.ppkرا جای امنی ذخیره کنید. - متن کادر بالایی (Public key for pasting into OpenSSH authorized_keys) را کپی کنید.
- روی سرور لینوکسی آن را به انتهای فایل
~/.ssh/authorized_keysاضافه کنید. - در PuTTY: Connection › SSH › Auth › Credentials → فایل ppk را انتخاب کنید، به Session برگردید و Save کنید.
# روی سرور لینوکس
mkdir -p ~/.ssh && chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys # کلید عمومی را پیست کنید
chmod 600 ~/.ssh/authorized_keys
ابزارهای خط فرمان: 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
putty.exe بسازید و در Target انتهای آن -load "نام نشست" را اضافه کنید. با دوبار کلیک مستقیم به دستگاه وصل میشوید.پروژهی واقعی: یوزر تونل SSH برای NetMod با پورت و سهمیهی حجم
در این پروژه برای سرور یک کاربر جدید میسازیم که فقط بتواند با نرمافزارهایی مثل NetMod از طریق SSH تونل بزند، با این مشخصات:
netuser بدون Shell؛ هیچ دستوری نمیتواند اجرا کند2222 — پورت ۲۲ مدیر دستنخورده میماند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) '
12- 1
passwordauthentication no— ورود با رمز بهطور سراسری بسته است (و میماند) - 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
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 (حالت بررسی بدون اعمال) علت مشخص شد:
12- 1Wrong unit format, expecting bytes, kbytes or mbytes — nftables واحد گیگابایت ندارد!
- 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 خطا بدهد، هیچ ریاستارتی انجام نمیشود.
12- 1
CONFIG-OK— تنظیمات سالم است - 2پورت 2222 روی IPv4 و IPv6 در کنار پورت ۲۲ فعال شد
123- 1سرویس سهمیه
active - 2سهمیهی
over 51200 mbytesثبت شد - 3
passwd -S: حرف P یعنی رمز تنظیم شده است
گام ۵ — اتصال با NetMod
| فیلد در NetMod | مقدار |
|---|---|
| نوع | SSH (Direct) |
| SSH Host | 46.249.xxx.xxx |
| SSH Port | 2222 |
| Username | netuser |
| Password | رمزی که با passwd تعیین شد |
12- 1پروفایل test1 روی پورت ۲۲۲۲ — نوار رنگی کنار آن یعنی متصل است
- 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 فعال باشد) |
123456- 1Event Log — گزارش مراحل اتصال؛ اولین جا برای عیبیابی
- 2New Session — باز کردن پنجرهی تنظیمات جدید
- 3Restart Session — اتصال دوباره پس از قطع شدن
- 4Duplicate Session — یک پنجرهی دیگر با همین تنظیمات
- 5Change Settings — تغییر تنظیمات حین اتصال (برخی گزینهها مثل کلید قابل تغییر نیستند)
- 6Copy All to Clipboard — کپی کل خروجی
تصویر واقعی از جلسهی کاری روی سرور
عیبیابی خطاهای رایج
| پیام خطا | معنی | راهحل |
|---|---|---|
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 چک کنید |
