فصل ۱۶ – شبکه (Networking)

وقتی صحبت از شبکه می‌شود، تقریباً هیچ کاری نیست که نتوان با لینوکس انجام داد.
لینوکس برای ساخت انواع سیستم‌ها و ابزارهای شبکه‌ای به کار می‌رود — از جمله فایروال‌ها، روترها، سرورهای نام (DNS)، دستگاه‌های ذخیره‌سازی تحت شبکه (NAS) و بسیاری موارد دیگر.

همان‌طور که دنیای شبکه‌ وسیع است، دستورات قابل استفاده برای پیکربندی و کنترل آن نیز بسیار زیادند.
در این فصل فقط روی چند دستور پرکاربرد تمرکز می‌کنیم — به‌ویژه دستورهایی برای پایش و بررسی شبکه و انتقال فایل‌ها، و در کنار آن برنامه‌ی ssh برای ورود از راه دور.

در این فصل یاد می‌گیریم:

فرض می‌کنیم شما تا حدی با مفاهیم شبکه آشنا هستید؛ چون در دنیای اینترنت امروز، هر کسی که از کامپیوتر استفاده می‌کند باید درکی پایه‌ای از شبکه داشته باشد.
برای استفاده‌ی کامل از این فصل، بهتر است با اصطلاحات زیر آشنا باشید:

در بخش «مطالعه‌ی بیشتر» در پایان فصل، مقالات مفیدی برای آشنایی با این مفاهیم معرفی شده‌اند.

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


بررسی و پایش شبکه

حتی اگر مدیر سیستم هم نباشید، گاهی لازم است عملکرد شبکه را بررسی کنید.

ping

پایه‌ای‌ترین دستور شبکه ping است. این دستور یک بسته‌ی خاص با نام ICMP ECHO_REQUEST به میزبان مقصد ارسال می‌کند.
اغلب دستگاه‌های شبکه وقتی چنین بسته‌ای دریافت می‌کنند، پاسخ می‌دهند؛ و این امکان را فراهم می‌کند که اتصال شبکه را آزمایش کنیم.

نکته: می‌توان بیشتر دستگاه‌های شبکه (از جمله میزبان‌های لینوکسی) را طوری پیکربندی کرد که این بسته‌ها را نادیده بگیرند — معمولاً برای دلایل امنیتی،
تا میزبان در برابر مهاجم احتمالی پنهان‌تر باشد. همچنین فایروال‌ها معمولاً طوری تنظیم می‌شوند که ترافیک ICMP را مسدود کنند.

برای مثال، اگر بخواهیم ببینیم آیا می‌توانیم به سایت linuxcommand.org دسترسی پیدا کنیم، از دستور زیر استفاده می‌کنیم:

[me@linuxbox ~]$ ping linuxcommand.org

وقتی اجرا شود، ping به طور پیش‌فرض هر ثانیه یک بسته ارسال می‌کند تا زمانی که آن را با Ctrl+C متوقف کنیم:

PING linuxcommand.org (66.35.250.210) 56(84) bytes of data.
64 bytes from vhost.sourceforge.net (66.35.250.210): icmp_seq=1 ttl=43 time=107 ms
64 bytes from vhost.sourceforge.net (66.35.250.210): icmp_seq=2 ttl=43 time=108 ms
...
--- linuxcommand.org ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 6010ms
rtt min/avg/max/mdev = 105.647/107.052/108.118/0.824 ms

پس از قطع اجرا، ping آمار عملکرد را چاپ می‌کند.
در شبکه‌ای که درست کار می‌کند، درصد از‌دست‌رفتن بسته‌ها باید صفر باشد.
یک ping موفق نشان می‌دهد که اجزای شبکه (کارت شبکه، کابل‌ها، مسیرها و دروازه‌ها) به‌طور کلی در وضعیت سالم هستند.


traceroute

برنامه‌ی traceroute (در برخی سیستم‌ها با نام tracepath) مسیر تمام گره‌هایی را که بسته‌های شبکه برای رسیدن از سیستم ما به مقصد طی می‌کنند، نمایش می‌دهد.

برای نمونه، برای دیدن مسیر تا سایت slashdot.org:

[me@linuxbox ~]$ traceroute slashdot.org

خروجی چیزی شبیه این است:

traceroute to slashdot.org (216.34.181.45), 30 hops max, 40 byte packets
 1  ipcop.localdomain (192.168.1.1)  1.066 ms  1.366 ms  1.720 ms
 2  * * *
 3  ge-4-13-ur01.rockville.md.bad.comcast.net (68.87.130.9)  14.622 ms  14.885 ms  15.169 ms
 ...
16  slashdot.org (216.34.181.45)  42.727 ms  42.016 ms  41.437 ms

در این خروجی می‌بینیم که برای رسیدن از سیستم ما به مقصد، باید از ۱۶ روتر عبور شود.
روترهایی که اطلاعات هویتی ارائه می‌دهند، نام میزبان، آدرس IP و زمان رفت‌وبرگشت (round-trip time) در سه نمونه مختلف نمایش داده می‌شود.
روترهایی که اطلاعاتشان را پنهان کرده‌اند یا به دلیل ازدحام شبکه یا فایروال پاسخ نمی‌دهند، با علامت * نمایش داده می‌شوند (مثل پرش شماره‌ی ۲ در مثال بالا).


netstat

برنامه‌ی netstat برای بررسی تنظیمات و آمارهای مختلف شبکه استفاده می‌شود.
با استفاده از گزینه‌های متعدد آن، می‌توان اطلاعات زیادی درباره‌ی وضعیت شبکه‌ی سیستم مشاهده کرد.

به‌عنوان مثال، با گزینه‌ی ‎-ie‎ می‌توان رابط‌های شبکه‌ی سیستم را بررسی کرد:

[me@linuxbox ~]$ netstat -ie

خروجی نمونه:

eth0    Link encap:Ethernet  HWaddr 00:1d:09:9b:99:67  
        inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0 
        inet6 addr: fe80::21d:9ff:fe9b:9967/64 Scope:Link 
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
        RX packets:238488 errors:0 dropped:0 overruns:0 frame:0 
        TX packets:403217 errors:0 dropped:0 overruns:0 carrier:0 
        collisions:0 txqueuelen:100 
        RX bytes:153098921 (146.0 MB)  TX bytes:261035246 (248.9 MB) 
        Memory:fdfc0000-fdfe0000 

lo      Link encap:Local Loopback  
        inet addr:127.0.0.1  Mask:255.0.0.0 
        inet6 addr: ::1/128 Scope:Host 
        UP LOOPBACK RUNNING  MTU:16436  Metric:1 
        RX packets:2208 errors:0 dropped:0 overruns:0 frame:0 
        TX packets:2208 errors:0 dropped:0 overruns:0 carrier:0 
        collisions:0 txqueuelen:0 
        RX bytes:111490 (108.8 KB)  TX bytes:111490 (108.8 KB)

در این خروجی، سیستم دو رابط شبکه دارد:

در بررسی‌های اولیه‌ی شبکه، باید به دو نکته توجه کرد:

  1. وجود واژه‌ی UP در ابتدای خط چهارم هر رابط که نشان می‌دهد رابط فعال است.
  2. وجود یک آدرس IP معتبر در فیلد inet addr (خط دوم).

در سیستم‌هایی که از DHCP استفاده می‌کنند، وجود آدرس IP معتبر در این قسمت تأیید می‌کند که DHCP به‌درستی کار می‌کند.


با گزینه‌ی ‎-r‎ می‌توان جدول مسیریابی کرنل را دید — یعنی نحوه‌ی ارسال بسته‌ها بین شبکه‌ها:

[me@linuxbox ~]$ netstat -r

خروجی نمونه:

Kernel IP routing table 
Destination  Gateway     Genmask       Flags   MSS Window  irtt Iface 
192.168.1.0  *           255.255.255.0 U         0 0          0 eth0  
default      192.168.1.1 0.0.0.0       UG        0 0          0 eth0 

در این مثال، جدول مسیریابی یک سیستم معمولی در شبکه‌ی محلی (LAN) پشت یک روتر/فایروال را نشان می‌دهد.

برنامه‌ی netstat گزینه‌های زیادی دارد و ما فقط چند مورد از آن‌ها را دیدیم. برای جزئیات کامل، صفحه‌ی man netstat را ببینید.


انتقال فایل‌ها از طریق شبکه

شبکه چه فایده‌ای دارد اگر نتوانیم فایل‌ها را با آن منتقل کنیم؟
ابزارهای زیادی برای انتقال داده از طریق شبکه وجود دارد؛ در این بخش دو ابزار کلاسیک را بررسی می‌کنیم.


ftp

برنامه‌ی ftp یکی از قدیمی‌ترین ابزارهای انتقال فایل است و نام خود را از پروتکل File Transfer Protocol گرفته است.
FTP سال‌ها در اینترنت برای دانلود فایل‌ها استفاده می‌شده و اکثر مرورگرهای وب نیز از آن پشتیبانی می‌کنند (با نشانی‌هایی مانند ftp://).

پیش از پیدایش مرورگرها، کاربران برای دریافت و ارسال فایل از دستور ftp استفاده می‌کردند تا با سرورهای FTP ارتباط برقرار کنند.

اما FTP امن نیست — چون نام کاربری و گذرواژه را به صورت متن ساده (cleartext) ارسال می‌کند و هر کسی که شبکه را شنود کند می‌تواند آن‌ها را ببیند.
به همین دلیل، تقریباً تمام سرورهای FTP عمومی امروزه از Anonymous FTP استفاده می‌کنند؛ یعنی هرکسی می‌تواند با نام کاربری anonymous وارد شود و گذرواژه‌ی بی‌اهمیتی وارد کند.

نمونه‌ای از یک نشست کاری FTP برای دانلود فایل Ubuntu ISO از سرور فایل:

[me@linuxbox ~]$ ftp fileserver
Connected to fileserver.localdomain.
220 (vsFTPd 2.0.1)
Name (fileserver:me): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub/cd_images/Ubuntu-8.04
250 Directory successfully changed.
ftp> ls
...
ftp> lcd Desktop
Local directory now /home/me/Desktop
ftp> get ubuntu-8.04-desktop-i386.iso
...
733079552 bytes received in 68.56 secs (10441.5 kB/s)
ftp> bye

توضیح دستورات جلسه بالا

دستور توضیح
ftp fileserver اجرای برنامه ftp و اتصال به سرور fileserver
anonymous ورود با حساب عمومی؛ برخی سرورها گذرواژه خالی را می‌پذیرند و برخی ایمیل می‌خواهند (مثلاً user@example.com)
cd pub/cd_images/Ubuntu-8.04 ورود به پوشه‌ی موردنظر در سرور راه‌دور
ls نمایش لیست فایل‌های موجود در آن پوشه
lcd Desktop تغییر مسیر محلی (در سیستم کاربر) به دسکتاپ
get ubuntu-8.04-desktop-i386.iso دانلود فایل موردنظر به مسیر محلی فعلی
bye خروج از سرور و بستن نشست FTP (می‌توان از quit یا exit هم استفاده کرد)

اگر در محیط ftp> دستور help را تایپ کنید، فهرست کامل فرمان‌های پشتیبانی‌شده نمایش داده می‌شود.
با اینکه کار با ftp کمی زمخت است، ولی همچنان در محیط‌هایی که دسترسی مجاز دارند، می‌تواند بسیاری از کارهای ساده‌ی مدیریت فایل را انجام دهد — هرچند دیگر ابزارهای مدرن‌تر جایگزین آن شده‌اند.


lftp – نسخه‌ی بهتر FTP

دستور ftp تنها ابزار خط فرمان برای اتصال به سرورهای FTP نیست.
در واقع، ابزارهای زیادی برای این کار وجود دارند. یکی از بهترین و محبوب‌ترین آن‌ها lftp است که توسط Alexander Lukyanov توسعه داده شده.

lftp از نظر ظاهر و نحوه‌ی کار شبیه ftp سنتی است، اما امکانات بسیار بیشتری دارد، از جمله:


wget

ابزار پرکاربرد دیگر برای دانلود فایل‌ها در خط فرمان، wget است.
wget برای دانلود از وب‌سایت‌ها و سرورهای FTP استفاده می‌شود.
می‌تواند تک فایل، چند فایل یا حتی کل یک وب‌سایت را دانلود کند.

برای نمونه، برای دریافت صفحه‌ی اصلی سایت linuxcommand.org از دستور زیر استفاده می‌کنیم:

[me@linuxbox ~]$ wget http://linuxcommand.org/index.php

خروجی نمونه:

--11:02:51--  http://linuxcommand.org/index.php
           => `index.php'
Resolving linuxcommand.org... 66.35.250.210
Connecting to linuxcommand.org|66.35.250.210|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
    [ <=>                                 ] 3,120         --.--K/s
11:02:51 (161.75 MB/s) - `index.php' saved [3120]

گزینه‌های متعدد wget اجازه می‌دهند تا:

تمام این قابلیت‌ها در صفحه‌ی راهنمای (man page) آن به‌خوبی مستند شده‌اند.


ارتباط امن با میزبان‌های راه‌دور

در سیستم‌های شبه‌یونیکس، از مدت‌ها پیش امکان مدیریت از راه دور از طریق شبکه وجود داشته است.
در گذشته (قبل از رواج گسترده‌ی اینترنت)، ابزارهایی مانند rlogin و telnet برای ورود از راه دور استفاده می‌شدند.

اما این برنامه‌ها یک ایراد جدی دارند — درست مانند ftp — تمام داده‌ها، از جمله نام کاربری و گذرواژه را به‌صورت متن ساده (cleartext) ارسال می‌کنند.
بنابراین، برای دنیای اینترنت مدرن، کاملاً ناامن و نامناسب هستند.


ssh

برای رفع این مشکل، پروتکلی جدید با نام SSH (Secure Shell) طراحی شد.

SSH دو مشکل اساسی ارتباط امن با سیستم راه‌دور را حل می‌کند:

  1. تأیید هویت (authentication) میزبان مقصد، تا از حمله‌ی «مرد میانی» (man-in-the-middle) جلوگیری شود.
  2. رمزگذاری کامل تمام ارتباطات بین سیستم محلی و راه‌دور.

SSH از دو بخش تشکیل شده است:

اکثر توزیع‌های لینوکس نسخه‌ای از SSH به نام OpenSSH (توسعه‌یافته توسط پروژه‌ی OpenBSD) را همراه خود دارند.

برخی توزیع‌ها (مثل Red Hat) هم کلاینت و هم سرور را به‌صورت پیش‌فرض نصب می‌کنند،
در حالی که برخی دیگر (مثل Ubuntu) فقط کلاینت را دارند.

برای اینکه سیستمی بتواند اتصالات SSH را دریافت کند باید:

💡 نکته:
اگر سیستم راه‌دور در دسترس ندارید اما می‌خواهید ssh را امتحان کنید،
مطمئن شوید که بسته‌ی OpenSSH-server روی سیستم شما نصب است و از نام localhost به‌عنوان میزبان مقصد استفاده کنید.
در این صورت، سیستم شما به خودش از طریق شبکه متصل می‌شود و می‌توانید عملکرد ssh را تمرین کنید.

برنامه‌ی کلاینت SSH که برای اتصال به سرورهای SSH راه‌دور استفاده می‌شود، به‌طور مناسب ssh نام دارد.

برای اتصال به سیستمی راه‌دور با نام remote-sys از دستور زیر استفاده می‌کنیم:

[me@linuxbox ~]$ ssh remote-sys

خروجی اولیه ممکن است چنین پیامی نمایش دهد:

The authenticity of host 'remote-sys (192.168.1.4)' can't be established.
RSA key fingerprint is 41:ed:7a:df:23:19:bf:3c:a5:17:bc:61:b3:7f:d9:bb.
Are you sure you want to continue connecting (yes/no)?

بارِ نخست که تلاش می‌کنیم به یک میزبان جدید متصل شویم، چنین هشداری نمایش داده می‌شود،
چون برنامه‌ی ssh تا به حال با آن میزبان تماس نداشته و در نتیجه کلید امنیتی آن را نمی‌شناسد.

برای تأیید و پذیرش هویت میزبان راه‌دور، باید در پاسخ بنویسیم:

yes

پس از تأیید، کلاینت ssh کلید میزبان را در لیست میزبان‌های شناخته‌شده ذخیره می‌کند و سپس از ما رمز عبور می‌خواهد:

Warning: Permanently added 'remote-sys,192.168.1.4' (RSA) to the list of known hosts.
me@remote-sys's password:

با وارد کردن صحیح رمز، وارد پوسته‌ی سیستم راه‌دور می‌شویم و اعلان (prompt) جدید از آن سیستم نمایش داده می‌شود:

Last login: Sat Aug 30 13:00:48 2008
[me@remote-sys ~]$

از این لحظه، شما در یک نشست پوسته‌ی راه‌دور (remote shell session) قرار دارید.
برای بستن ارتباط و بازگشت به پوسته‌ی محلی، کافی است دستور exit را وارد کنید.


همچنین می‌توان با نام کاربری متفاوتی به سیستم راه‌دور وصل شد.
مثلاً اگر کاربر محلی ما «me» باشد ولی در سیستم راه‌دور حسابی با نام «bob» داشته باشیم، اتصال به این صورت انجام می‌شود:

[me@linuxbox ~]$ ssh bob@remote-sys
bob@remote-sys's password:
Last login: Sat Aug 30 13:03:21 2008
[bob@remote-sys ~]$

همان‌طور که قبلاً گفته شد، ssh صحت هویت میزبان راه‌دور را بررسی می‌کند.
اگر این تأیید با شکست مواجه شود، پیامی هشداردهنده مانند زیر ظاهر می‌شود:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is 
41:ed:7a:df:23:19:bf:3c:a5:17:bc:61:b3:7f:d9:bb.
Please contact your system administrator.
Add correct host key in /home/me/.ssh/known_hosts to get rid of this message.
Offending key in /home/me/.ssh/known_hosts:1
RSA host key for remote-sys has changed and you have requested strict checking.
Host key verification failed.

این پیام معمولاً به یکی از دو دلیل زیر ظاهر می‌شود:

  1. حمله‌ی «مرد میانی» (Man-in-the-middle attack) در حال انجام است و فردی در تلاش است تا ارتباط شما را شنود یا دست‌کاری کند.
    (این حالت نادر است، چون ssh برای همین موضوع هشدار می‌دهد.)
  2. تغییر واقعی در سیستم مقصد اتفاق افتاده است — مثلاً سیستم عامل یا سرور SSH آن دوباره نصب شده است.

با وجود اینکه احتمال دوم شایع‌تر است، نباید مورد اول را بدون بررسی رد کرد.
همیشه وقتی چنین پیامی دیدید، با مدیر سیستم مقصد تماس بگیرید و اطمینان حاصل کنید که تغییر مجاز بوده است.


وقتی مطمئن شدید دلیل هشدار بی‌خطر است، می‌توانید مشکل را در سمت کلاینت اصلاح کنید.
برای این کار باید کلید قدیمی و منسوخ‌شده‌ی میزبان را از فایل زیر حذف کنید:

~/.ssh/known_hosts

در مثال بالا، خط مشکل‌دار این‌گونه مشخص شده بود:

Offending key in /home/me/.ssh/known_hosts:1

یعنی کلید میزبان نادرست در خط شماره ۱ از فایل known_hosts قرار دارد.
کافی است با یک ویرایشگر متنی (مثلاً vim یا nano) آن خط را حذف کنید تا مشکل برطرف شود.

این یعنی خط اول فایل known_hosts شامل کلید نامعتبر است.
برای رفع مشکل کافی است آن خط را از فایل حذف کنید تا برنامه‌ی ssh بتواند مجدداً اعتبارنامه‌های جدید میزبان را بپذیرد.


اجرای دستورات روی سیستم راه‌دور با SSH

علاوه بر باز کردن یک نشست پوسته (shell session) روی سیستم راه‌دور،
ssh می‌تواند برای اجرای یک دستور خاص روی آن سیستم نیز استفاده شود.

برای مثال، برای اجرای دستور free روی سیستمی با نام remote-sys و نمایش نتیجه در سیستم محلی:

[me@linuxbox ~]$ ssh remote-sys free
me@twin4's password: 
             total     used     free     shared    buffers     cached 
Mem:        775536   507184   268352          0     110068     154596
-/+ buffers/cache:   242520   533016 
Swap:      1572856        0    1572856
[me@linuxbox ~]$

در این حالت، دستور روی سیستم راه‌دور اجرا می‌شود،
اما خروجی آن مستقیماً در ترمینال سیستم محلی شما نمایش داده می‌شود.


می‌توان از این روش به شکل‌های جالب‌تری هم استفاده کرد.
مثلاً در مثال زیر، دستور ls روی سیستم راه‌دور اجرا می‌شود،
ولی خروجی آن در فایلی روی سیستم محلی ذخیره می‌گردد:

[me@linuxbox ~]$ ssh remote-sys 'ls *' > dirlist.txt
me@twin4's password:
[me@linuxbox ~]$

به استفاده از تک‌گیومه (‘ ’) در دستور بالا توجه کنید.
دلیلش این است که گسترش مسیرها (pathname expansion) باید روی سیستم راه‌دور انجام شود، نه در سیستم محلی.

و اگر بخواهیم خروجی در همان سیستم راه‌دور ذخیره شود،
علامت تغییر مسیر (>) و نام فایل را هم داخل همان تک‌گیومه‌ها قرار می‌دهیم:

[me@linuxbox ~]$ ssh remote-sys 'ls * > dirlist.txt'

تونل‌سازی با SSH (SSH Tunneling)

وقتی بین سیستم محلی و راه‌دور از طریق SSH ارتباط برقرار می‌کنیم،
در واقع یک تونل رمزگذاری‌شده (Encrypted Tunnel) بین این دو ایجاد می‌شود.

به‌صورت معمول، این تونل برای ارسال امن دستورات و دریافت خروجی از راه‌دور استفاده می‌شود.
اما پروتکل SSH می‌تواند انواع دیگری از ترافیک شبکه را نیز از درون این تونل عبور دهد
به نوعی مثل یک VPN (شبکه‌ی خصوصی مجازی) بین دو سیستم عمل می‌کند.

یکی از رایج‌ترین کاربردهای این قابلیت، انتقال ترافیک سیستم پنجره‌ای X (X Window System) است.

اگر سیستمی دارید که X Server در آن در حال اجراست (یعنی همان سیستم نمایش رابط گرافیکی)،
می‌توانید برنامه‌ی گرافیکی (X Client) را روی سیستم راه‌دور اجرا کرده
و رابط گرافیکی آن را در سیستم محلی خود ببینید.

انجام این کار بسیار ساده است.
فرض کنید در سیستم محلی‌ای به نام linuxbox نشسته‌ایم که X Server دارد
و می‌خواهیم برنامه‌ی xload را روی سیستم راه‌دوری به نام remote-sys اجرا کنیم
و خروجی گرافیکی آن روی سیستم خودمان نمایش داده شود.

کافی است بنویسیم:

[me@linuxbox ~]$ ssh -X remote-sys
me@remote-sys's password:
Last login: Mon Sep 08 13:23:11 2008
[me@remote-sys ~]$ xload

پس از اجرای دستور xload روی سیستم راه‌دور،
پنجره‌ی آن روی سیستم محلی شما ظاهر می‌شود.

🔸 در برخی سیستم‌ها ممکن است لازم باشد به‌جای گزینه‌ی -X از گزینه‌ی -Y استفاده کنید
(به‌ویژه وقتی تنظیمات امنیتی X محدودتر است).


scp و sftp

بسته‌ی OpenSSH شامل دو ابزار دیگر نیز هست که می‌توانند از طریق تونل رمزگذاری‌شده‌ی SSH، فایل‌ها را در شبکه جابه‌جا کنند.


🔹 scp (Secure Copy)

برنامه‌ی scp تقریباً شبیه دستور cp عمل می‌کند، با این تفاوت که می‌تواند فایل‌ها را بین دو سیستم از طریق شبکه‌ی امن SSH منتقل کند.
در مسیر مبدأ یا مقصد، می‌توان نام میزبان راه‌دور را قبل از مسیر فایل و با علامت «::» مشخص کرد.

برای مثال، اگر بخواهیم فایلی به نام document.txt را از پوشه‌ی خانگی‌مان روی سیستم راه‌دور remote-sys به مسیر فعلی سیستم محلی خود منتقل کنیم:

[me@linuxbox ~]$ scp remote-sys:document.txt .
me@remote-sys's password:
document.txt                           100% 5581     5.5KB/s   00:00
[me@linuxbox ~]$

اگر نام کاربری روی سیستم راه‌دور با کاربر فعلی ما فرق داشته باشد، می‌توان آن را به‌صورت زیر مشخص کرد:

[me@linuxbox ~]$ scp bob@remote-sys:document.txt .

🔹 sftp (Secure FTP)

دومین ابزار انتقال فایل مبتنی بر SSH، برنامه‌ی sftp است که همان‌طور که از نامش پیداست، جایگزینی امن برای ftp محسوب می‌شود.

sftp دقیقاً مانند ftp کار می‌کند — با این تفاوت مهم که تمام داده‌ها، از جمله نام کاربری و رمز عبور، در تونل رمزگذاری‌شده‌ی SSH منتقل می‌شوند.

مزیت بزرگ دیگر sftp این است که نیازی به اجرای FTP Server در سمت راه‌دور ندارد؛
فقط کافی است SSH Server فعال باشد.
یعنی هر سیستمی که بتوان با آن از طریق SSH ارتباط گرفت، می‌تواند مانند یک سرور FTP نیز مورد استفاده قرار گیرد.

نمونه‌ی یک نشست کاری sftp:

[me@linuxbox ~]$ sftp remote-sys
Connecting to remote-sys...
me@remote-sys's password:
sftp> ls
ubuntu-8.04-desktop-i386.iso
sftp> lcd Desktop
sftp> get ubuntu-8.04-desktop-i386.iso
Fetching /home/me/ubuntu-8.04-desktop-i386.iso to ubuntu-8.04-desktop-i386.iso
/home/me/ubuntu-8.04-desktop-i386.iso 100% 699MB 7.4MB/s 01:35
sftp> bye

💡 نکته:
پروتکل SFTP در بسیاری از مدیران فایل گرافیکی لینوکس (مانند Nautilus در محیط GNOME و Konqueror در KDE) پشتیبانی می‌شود.
می‌توانید در نوار آدرس آن‌ها، مسیرهایی با پیشوند sftp:// وارد کنید تا به فایل‌های سیستم راه‌دور متصل شوید.


کلاینت SSH برای ویندوز

فرض کنید پشت یک سیستم ویندوزی نشسته‌اید اما لازم دارید به سرور لینوکسی خود متصل شوید تا کاری انجام دهید — چه باید کرد؟
پاسخ ساده است: باید یک کلاینت SSH برای ویندوز نصب کنید.

محبوب‌ترین آن‌ها PuTTY است که توسط Simon Tatham و تیمش ساخته شده.
برنامه‌ی PuTTY یک پنجره‌ی ترمینال باز می‌کند و به کاربر ویندوز اجازه می‌دهد تا از طریق SSH یا Telnet به میزبان‌های راه‌دور متصل شود.
این برنامه همچنین ابزارهایی مشابه scp و sftp نیز ارائه می‌دهد.

می‌توانید PuTTY را از این آدرس دریافت کنید:
👉 http://www.chiark.greenend.org.uk/~sgtatham/putty/


جمع‌بندی

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


مطالعه‌ی بیشتر

🔹 راهنمای جامع (هرچند قدیمی) مدیریت شبکه در لینوکس از Linux Documentation Project:
http://tldp.org/LDP/nag2/index.html

🔹 مقالات مفید و پایه‌ای در ویکی‌پدیا: