انتقال فایلها در طول شبکه (فرمان ftp)
اگر که ما قادر به انتقال فایلها در طول شبکه نباشیم، شبکه بیمعنا میشود. برنامههای زیادی وجود دارند که داده را در طول شبکه انتقال میدهند. دو مورد از آنها را در این درس و درسهای آینده توضیح خواهیم داد.
فرمان FTP – انتقال فایلها با استفاده از پروتکل انتقال فایل
یکی از برنامههای واقعا کلاسیک شبکه FTP میباشد. FTP نام خود را از عبارت File Transfer Protocol به معنی پروتکل انتقال فایل گرفته است. پروتکل FTP به طور وسیعی در طول اینترنت به منظور انتقال فایل استفاده میشود. اکثر مرورگرها از این پروتکل پشتیبانی میکنند و آدرس آغازین آن به جای http:// آدرس ftp:// میباشد. قبل از آنکه مرورگری وجود داشته باشد، FTP وجود داشت تا انتقال فایل در سرورها و ماشینهای شبکه صورت پذیرد.
FTP در فرم اصلی خود ایمن نبود زیرا نام کاربری و رمز عبور را به صورت متن ساده در مسیر شبکه ارسال میکرد. این یعنی اینکه رمزنگاری نمیشد و هر شنود دیگری که در شبکه وجود داشت قادر به دریافت و سرقت این اطلاعات بود.
به همین منظور تقریبا همه انتقالهای FTP در طول شبکه از طریق سرورهای ناشناس انجام میشد. یک سرور ناشناس به هر شخصی اجازه میدهد تا با استفاده از نام کاربری anonymous و یک پسورد بیمعنی وارد شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
[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 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. -rw-rw-r-- 1 500 500 733079552 Apr 25 03:53 ubuntu-8.04-desktopi386. iso 226 Directory send OK. ftp> lcd Desktop Local directory now /home/me/Desktop ftp> get ubuntu-8.04-desktop-i386.iso local: ubuntu-8.04-desktop-i386.iso remote: ubuntu-8.04-desktop-i386.iso 200 PORT command successful. Consider using PASV. 150 Opening BINARY mode data connection for ubuntu-8.04-desktop-i386.iso (733079552 bytes). 226 File send OK. 733079552 bytes received in 68.56 secs (10441.5 kB/s) ftp> bye |
با نوشتن واژه help لیست کاملی ا فرمانهای پشتیبانی شده در محیط به ما نشان داده خواهد شد. برای خروج، کافی است exit یا bye را وارد نمایید. جدول زیر فرمانهای موجود در این نشست را به ما نشان میدهد:
فرمان | مفهوم |
---|---|
ftp fileserver | برنامه FTP را به کار میگیرد و شما را به سرور فایل FTP متصل میکند. |
anonymous | نام ورود. پس از درخواستدورود یک درخواست پسورد نمایان میشود. برخی سرورها یک پسورد خالی را قبول میکنند. برخی دیگر نیازمند یک پسورد در فرم آدرس ایمیل هستند. |
cd pub/cd_images/Ubuntu-8.04 | تغییر پوشه در سرور ریموت که حاوی فایل مورد نظر است. قابل ذکر است که بر روی بیشتر سرورهای ناشناس FTP، فایلهایی که برای دانلود عمومی قرار دارند معمولا در پوشهای با نام public قرار دارند. |
ls | لیست کردن پوشه بر روی سیستم ریموت |
lcd Desktop | تغییر پوشه بر روی سیستم محلی به مسیر ~/Desktop. در این مثال برنامه ftp وقتی پوشه فعلی ~ به کار گرفته شد. این فرمان پوشه فعلی را به پوشه ~/Desktop تغییر میدهد. |
get ubuntu-8.04-desktop-i386.iso | به سیستم ریموت فرمان بده تا فایل ubuntu را به سیستم محلی انتقال بده. از آنجایی که پوشه فعلی بر روی سیستم محلی به مسیر /~Desktop تغییر یافت، فایل در آنجا دانلود خواهد شد. |
bye | خاموش کردن سیستم ریموت و پایان نشست برنامه ftp. فرمانهای quit و exit نیز استفاده میشوند. |
فرمان lftp
فرمان ftp تنها کلاینت FTP خط فرمان نیست. در حقیقت انواع زیادی وجود دارد و یکی از انواع بهتر و رایجتر آن lftp میباشد. این فرمان بسیار بهتر از نسخه سنتی ftp عمل میکند و ویژگیهای رفاهی زیادی دارد. شامل پشتیبانی از چندین پروتکل (مثل HTTP)، تلاش خودکار در دانلودهای شکست خورده، پردازش در پسزمینه، تکمیل خودکار فرمان و اسامی نام با استفاده از Tab و …
ابزار wget – دانلودکننده غیرتعاملی شبکه
یک برنامه رایج دیگری خط فرمان برای دانلود فایل، wget میباشد. این ابزار به منظور دریافت محتوا هم از وب و هم از سایتهای FTP مفید است. یک فایل، چندین فایل و حتی کل یک سایت را میتوان با آن دانلود کرد. در مثال زیر صفحه اول http://www.linuxcommand.org با کمک فرمان wget دانلود میشود:
1 2 3 4 5 6 7 8 9 |
[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] |
ایمن کردن ارتباطات با میزبان از راه دور
بسیاری از کاربران در سیستمعامل لینوکس بایستی قادر به مدیریت سیستمعامل از راه دور از طریق شبکه به صورت ریموت باشند. تقریبا همه مدیران وبسایتها و وبمسترها به این شیوه سرورهای سایتهای خود را مدیریت میکنند.
در گذشته قبل از سازگاری کامل اینترنت، برنامههای رایج زیادی به منظور لاگین به سرورهای ریموت وجود داشت. مثل برنامههای telnet و rlogin. هر چند این برنامهها از همان ایرادی که فرمان ftp داست رنج میبردند. تمامی ارتباطات این برنامهها به صورت متن ساده (رمزنگاری نشده) انجام میگرفت (حتی ارسال نام کاربری و رمز عبور نیز متن ساده بود) در نتیجه در این دوران که سرقتهای اینترنتی زیاد شده استفاده از آنها دیگر مناسب نبود. تا آنجا که دو رویکرد دیگر به میان آمد که میخواهیم درباره آنها گفتگو کنیم. SSH و SCP.
فرمان SSH – لاگین ایمن به کامپیوتر از راه دور
برای حل مشکلهای موجود در telnet پروتکل جدیدی با نام SSH (سرنام Secure Shell) توسعه یافت. SSH دو مشکل اصلی در رابطه با ارتباط ایمن را بر طرف میکند. اول اینکه SSH میزبان ریموت را تشخیص هویت میکند (از حملات شخص واسط man-in-the-middle جلوگیری کرده) و دوم اینکه همه ارتباطات انجام شده بین میزباهای لوکال و ریموت را رمزنگاری میکند.
SSH از دو بخش تشکیل شده است. یک سرور SSH که بر روی میزبان ریموت اجرا شده و منتظر تماسهای ورودی بر روی پورت ۲۲ میماند. در حالی که کلاینت SSH بر روی ماشین محلی برای برقراری ارتباط با ماشین سرور استفاده میشود.
بیشتر توزیعهای لینوکس دارای یک اجرا از SSH هستند که OpenSSH نام دارد و از پروژه BSD گرفته شده است. برخی توزیعها به صورت پیشفرض دارای بستههای هم کلاینت و هم سرور SSH هستند. (مثل RedHat) در حالی که برخی از توزیعات دیگر (مثل اوبونتو) فقط دارای کلاینت هستند. برای فعالسازی یک سیستم به دریافت تماسهای ریموت بایستی بسته OpenSSH-Server نصب شده و پیکربندی و اجرا شده باشد و (اگر سیستم در پشت یک فایروال قرار گرفته است) بایستی به اتصالات ورودی شبکه بر روی پورت TCP 22 اجازه ورود بدهد.
نکته: اگر که یک سیستم ریموت برای اتصال ندارید ولی میخواهید این مثالها را امتحان کنید، ابتدا مطمئن شوید که بسته OpenSSH-Server نصب شده است و از localhost به عنوان نام میزبان ریموت استفاده میکند. از این طریق ماشین با خود ارتباط برقرار میکند. فرض را بر این میگذاریم که شما سرور لینوکس ندارید تا به آن SSH کنید. در نتیجه همانطور که گفتیم به این منظور ابتدا بایستی بسته OpenSSH-server را نصب کنید. این کار را با استفاده از فرمان apt-get همانطور که در درسهای قبلی آموزش دادیم، انجام دهید.
پس از نصب OpenSSH-server میتوانیم از سیستم خود به عنوان سرور استفاده کنیم. یعنی در این حالت سیستم هم سرور است هم کلاینت. یعنی سیستم از طریق SSH به خودش متصل میشود. به این منظور نام سرور را remote-sys مینامیم:
1 2 3 4 |
[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 را وارد میکنیم و سپس با وارد کردن پسورد اتصال برقرار میشود.
اتصال ریموت برقرار است تا زمانی که فرمان exit را وارد کنید. همچنین میتوانید با استفاده از یک کاربر دیگر به صورت ریموت متصل شوید.
برای مثال اگر کاربر پیشفرض ما me باشد میتوانیم با کاربر bob هم به صورت زیر متصل شویم.
1 2 3 4 |
[me@linuxbox ~]$ ssh bob@remote-sys bob@remote-sys's password: Last login: Tue Aug 30 13:03:21 2011 [bob@remote-sys ~]$ |
علاوه بر اینها فرمان ssh ما را قادر میسازد تا یک فرمان را اجرا کنیم به صورت زیر:
1 2 3 |
[me@linuxbox ~]$ ssh remote-sys 'ls *' > dirlist.txt me@twin4's password: [me@linuxbox ~]$ |
به استفاده از تک کوتیشن توجه کنید. این کار انجام میشود چون که ما نمیخواهیم که بسط نام مسیر (Pathname Expansion) بر روی ماشین لوکال انجام شود. به جای آن میخواهیم که بر روی سیستم ریموت صورت پذیرد. علاوه بر این اگر که بخواهیم خروجی به یک فایل در ماشین ریموت ریدایرکت شود میتوانیم از عملگر ریدایرکت و نام فایل در بین تک کوتیشن استفاده کنیم.
1 |
[me@linuxbox ~]$ ssh remote-sys 'ls * > dirlist.txt' |
فرمانهای scp و sftp – انتقال ایمن فایلها
بسته OpenSSH همچنین شامل دو برنامه است که با استفاده از یک تانل رمزنگاری شده SSH فایلها را در عرض شبکه کپی میکند. اولین فرمان، فرمان scp (سرنام عبارت Secure Copy به معنی کپی ایمن) میباشد که شبیه فرمان cp برای کپی نمودن فایلها مورد استفاده قرار میگیرد. آشکارترین تفاوت آن این است که نام مسیر مبدا یا مقصد با نام یک میزبان ریموت به همراه یک کاراکتر نقطه همراه میشود. برای مثال اگر که میخواهیم یک سند با نام document.txt را از پوشه خانگی خود در یک سیستم ریموت (که در مثال ما همان localhost است) به پوشه خانگی لوکال سیستم خود کپی کنیم، به صورت زیر عمل میکنیم:
1 2 3 4 |
[me@linuxbox ~]$ scp remote-sys:document.txt . me@remote-sys's password: document.txt 100% 5581 5.5KB/s 00:00 [me@linuxbox ~]$ |
توجه داشته باشید که درست مثل ssh در فرمان scp نیز میتوانید از دیگر کاربران موجود نیز استفاده کنید.
دومین برنامه به منظور کپی، فرمان sftp میباشد که همانطور که از نام آن پیداست جایگزینی امن برای ftp میباشد. فرمان sftp درست مثل ftp عمل میکند و به جای انتقال متن ساده، متن رمزنگاری شده را انتقال میدهد.
Sftp از تانل رمزنگاری شده SSH استفاده میکند. sftp یک مزیت بزرگ بر استفاده از ftp دارد و آن این است که نیاز ندارد تا یک سرور FTP بر روی میزبان ریموت در حال اجرا باشد و فقط نیاز به اجرای سرور SSH دارد. به این معنی که هر ماشین ریموتی که بتواند به کلاینت SSH متصل شود، قادر خواهید بود به عنوان یک سرور FTP نیز مورد استفاده قرار گیرد.
این هم یک نشست نمونه:
1 2 3 4 5 6 7 8 9 10 |
[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) استفاده کنیم، میتوانیم وارد URL ای شویم که یا sftp:// آغاز میگردد و فایلهایی که بر روی سرور ریموت SSH در حال اجراست پردازش کنیم.
درباره فرشید نوتاش حقیقت
همیشه نیازمند یک منبع آموزشی فارسی در حوزه نرمافزارهای آزاد/ متنباز و سیستمعامل گنو/لینوکس بودم. از این رو این رسالت رو برای خودم تعریف کردم تا رسانه «محتوای باز» رو بوجود بیارم.
نوشتههای بیشتر از فرشید نوتاش حقیقتاین سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش میشوند.
دیدگاهتان را بنویسید