نحوه استفاده از SFTP برای انتقال امن فایل
FTP یا “File Transfer Protocol” یک روش محبوب رمزگذاری نشده برای انتقال فایلها بین دو سیستم از راه دور میباشد.
SFTP، که مخفف SSH File Transfer Protocol یا Secure File Transfer Protocol است، یک پروتکل پکیج شده با SSH میباشد که به روشی مشابه اما از طریق اتصال ایمن کار میکند. مزیت این روش توانایی استفاده از اتصال ایمن برای انتقال فایلها بدون وابستگی به فایل سیستم، سیستم لوکال و راه دور میباشد.
تقریبا در همه موارد، SFTP به دلیل ویژگیهای امنیتی اساسی و توانایی کار تحت پروتکل SSH، نسبت به FTP ارجح است. FTP یک پروتکل ناامن میباشد که باید فقط در موراد محدود یا شبکههایی که به آنها اعتماد داریم استفاده شود.
اگرچه SFTP در بسیاری از ابزارهای گرافیکی ادغام شده است، این راهنما نحوه استفاده از آن را از طریق اینترفیس خط فرمان نشان میدهد.
نحوه ایجاد اتصال SFTP
به طور پیش فرض، SFTP از پروتکل SSH برای احراز هویت و ایجاد یک اتصال ایمن استفاده میکند. به همین دلیل، همان روشهای احراز هویت موجود در SSH در نشست SFTP نیزقابل استفاده میباشند.
اگرچه به صورت پیشفرض تنظیم و استفاده از نام کاربری و رمزعبور آسان میباشد، ولی توصیه میشود که از زیرساخت کلید عمومی برای احراز هویت پروتکل SSH استفاده شود. بنابراین برای اتصال SSH به هر سیستمی نیاز است کلید عمومی خود را بر روی آن انتقال دهیم. علاوه بر اینکه این روش بسیار امنتر است، میتواند در طولانی مدت در وقت نیز صرفه جویی نماید.
برای شروع تنظیم SSH از راهنمای مربوط به نحوه تنظیم SSH برای اتصال به سرور راه دور با استفاده از کلید عمومی استفاده میکنیم.
در اولین مرحله از تنظیم پروتکلSFTP، اگر بتوانیم به سیستم راه دور از طریق SSH و بدون نیاز به نام کاربری و رمز متصل شویم، یعنی تمام نیازمندیهای لازم برای استفاده از SFTP برای مدیریت فایلها انجام شده است. برای تست دسترسی SSH از دستور زیر استفاده میکنیم.
Iranshell@srv:~$ ssh iranshell@your_server_ip_or_remote_hostname
بعد از برقراری اتصال میتوانیم با استفاده از دستور زیر اتصال را قطع کنیم.
Iranshell@srv:~$ exit
اکنون نوبت برقراری اتصال SFTP با استفاده از دستور زیر میباشد.
Iranshell@srv:~$ sftp iranshell@your_server_ip_or_remote_hostname
با اجرای دستور بالا به سیستم راه دور متصل و یک پیام SFTP نمایش داده خواهد شد.
در صورتی که از پورتی غیر از 22 برای SSH استفاده کردهایم، برای اتصال SFTP از دستور زیر استفاده میکنیم.
Iranshell@srv:~$ sftp -oPort=custom_port iranshell@your_server_ip_or_remote_hostname
درخواست راهنما در SFTP
مفیدترین دستور در لینوکس به قطع یقین دستور help میباشد. با استفاده از یکی از دو دستور زیر میتوانیم خلاصهای از راهنمای SFTP را مطالعه کنیم.
Iranshell@srv:~$ help
Or
Iranshell@srv: sftp> ?
با این کار لیستی از دستورات موجود نمایش داده خواهد شد:
پیمایش فایل سیستم مقصد با استفاده از SFTP
میتوانیم با استفاده از فرمانهای فایل سیستم راه دور پیمایش کنیم.
خروجی دستور pwd، مسیر دایرکتوری فعلی که در آن هستیم میباشد.
Iranshell@srv: sftp> pwd
Output
Remote working directory: /home/demouser
میتوانیم با دستور ls محتوای دایرکتوری فعلی سیستم راه دور را مشاهده کنیم.
Iranshell@srv: sftp> Is
Output
Summary.txt info.html temp.txt testDirectory
نکته مهم اینکه دستورات موجود در SFTP، دستورات shell معمول نیستند و از نظر ویژگی به آن اندازه غنی نمیباشند، اما برخی از مهمترین flagهای مورد نیاز در آن پیادهسازی شده است.
Iranshell@srv: sftp> ls -la
همانند خط فرمان سیستم خودمان میتوانیم برای رفتن به دایرکتوری دیگر، از این دستور زیر استفاده کنیم.
Iranshell@srv: sftp> cd testDirectory
با استفاده از دستورات بالا توانستیم فایل سیستم دستگاه راه دور را پیمایش کنیم. سوال، اگر به فایل سیستم محلی سیستم خودمان نیاز داشته باشیم باید چه کنیم؟ جواب، میتوانیم دستورات مستقیم را با اضافه کردن حرف l به اول آنها به سیستم محلی خود هدایت کنیم.
همه دستوراتی که تاکنون بحث شده دارای معادلهای محلی نیز میباشند. برای مثال میتوانیم با دستور زیر دایرکتوری محلی سیستم خودمان را پرینت کنیم.
Iranshell@srv: sftp> lpwd
Output
Local working directory: /Users/demouser
با استفاده از دستور زیر، میتوانیم محتوای دایرکتوری فعلی را روی سیستم محلی لیست کنیم:
Iranshell@srv: sftp> lls
Output
Desktop local.txt test.html
Documents analysis.rtf zebra.html
همچنین میتوانیم دایرکتوری مورد نظر خود را برای تعامل در سیستم محلی تغییر دهیم.
Iranshell@srv: sftp> lcd Desktop
انتقال فایلها با استفاده از SFTP
پیمایش در فایل سیستمهای راه دور و محلی، بدون اینکه بتوانیم فایلها را بین آنها انتقال دهیم، قابلیت محدودی در اختیار ما قرار میدهد.
انتقال فایلها از سیستم راه دور به سیستم محلی
برای دانلود فایلها از هاست راه دور میتوانیم از دستور زیر استفاده کنیم.
Iranshell@srv: sftp> get remoteFile
Output
Fetching /home/demouser/remoteFile to remoteFile
/home/demouser/remoteFile 100% 37KB 36.8KB/s 00:01
همانطور که مشاهدده میکنید، به صورت پیشفرض، فرمان get یک فایل راه دور را در فایلی با همان اسم در سیستم محلی دانلود میکند.
با تعیین نام در ادامه دستور کپی میتوانیم فایل کپی شده سیستم راه دور را با نام متفاوتی ذخیره کنیم.
Iranshell@srv: sftp> get remoteFile localFile
دستور get همچنین دارای flagهای اختیاری میباشد. به عنوان مثال، ما میتوانیم یک دایرکتوری و تمام محتوای آن را با استفاده از فلگ recursive کپی کنیم.
Iranshell@srv: sftp> get -r someDirectory
همچنین میتوانیم با استفاده از فلگ p- یا P- به SFTP بگوییم که فایل را با حفظ مجوزها و زمان دسترسی کپی نماید.
Iranshell@srv: sftp> get -Pr someDirectory
انتقال فایلهای محلی به سیستم راه دور
انتقال فایلها به سیستم راه دور با استفاده از فرمان put به راحتی انجام میشود.
Iranshell@srv: sftp> put localFile
flagهایی که در دستور get با آنها کار میکند برای put نیز قابل استفاده میباشند. بنابراین برای کپی یک دایرکتوری کامل محلی، از دستور زیر استفاده میکنیم.
Iranshell@srv: sftp> put -r localDirectory
یکی از دستورات معروف که برای دانلود و آپلود فایلها نیاز میباشد، دستور df است. با استفاده از این دستور شما میتوانید فضای مورد نیاز برای انتقال فایل را چک کنید.
Iranshell@srv: sftp> df -h
این دستور به صورت مستقیم بر روی سیستم محلی قابل اجرا نمیباشد. ولی میتوانیم این مشکل را با استفاده از ! حل کنیم.
دستور ! ما را در shell محلی قرار میدهد. جایی که میتوانیم هر دستوری که بخواهیم را بر روی سیستم محلی اجرا کنیم.
Iranshell@srv: sftp> !
و سپس
Iranshell@srv: df -h
بعد از دستور بالا در خط فرمان SFTP هر دستور محلی دیگری مطابق انتظار عمل خواهد کرد. برای بازگشت به اتصال SFTP خود دستور زیر را تایپ میکنیم.
Iranshell@srv: exit
دستکاری ساده فایل با استفاده از SFTP
SFTP این امکان را میدهد تا تغییرات اساسی که هنگام کار به صورت محلی با سلسله مراتب یک فایل قابل انجام است را به صورت راه دور نیز انجا دهیم.
استفاده از chown
به عنوان مثال، میتوانیم با استفاده از دستور زیر owner یک فایل بر روی سیستم راه دور را تغییر دهیم.
Iranshell@srv: sftp> chown userID file
بر خلاف دستور system chmod، دستور SFTP نام کاربری را قبول نمیکند اما به جای آن از UIDها استفاده میکند. متاسفانه هیچ راه آسانی برای پیدا کردن UID مناسب از داخل اینترفیس SFTP وجود ندارد و مجبوریم به روش زیر عمل کنیم.
Iranshell@srv: sftp> get /etc/passwd
Iranshell@srv: sftp> !less passwd
توجه کنید که چگونه به جای دستور !، از آن به عنوان یک پیشوند برای دستور shell محلی استفاده کردهایم؟؟ این کار برای اجرای هر دستور موجود در سیستم محلی انجام میشود. و میتواند با دستور df محلی نیز استفاده شود.
در فایل passwd مقدار UID در ستون سوم فایل قرار دارد.
استفاده از دستور chgrp
به طور مشابه، ما میتوانیم مالک گروه فایل را با دستور زیر تغییر دهیم.
Iranshell@srv: sftp> chgrp groupID file
باز هم هیچ راه آسانی برای لیست کردن گروههای سیستم راه دور بع غیر از روش زیر وجود ندارد.
Iranshell@srv: sftp> get /etc/group
Iranshell@srv: sftp> !less group
ستون سوم ID گروه مرتبط با نام موجود در ستون اول را نگه میدارد.
استفاده از دستور chmod
خوشبختانه دستور chmod در سیستم فایل راه دور کار میکند و نیازی به دستور یا روش دیگری نمیباشد.
Iranshell@srv: sftp> chmod 777 publicFile
Output
Changing mode on /home/demouser/publicFile
هیچ دستوری برای دستکاری یا تغییر مجوزهای فایل محلی وجود ندارد اما با تنظیم Umask محلی، هر فایلی که در سیستم محلی کپی میشود، مجوزهای مورد نظر را خواهد داشت.
این کار را میتوان با دستور lumask انجام داد.
Iranshell@srv: sftp> lumask 022
Output
Local umask: 022
بعد اجرای دستور بالا، از این به بعد همهی فایلهای دانلود شده (تا زمانی که از فلگ p- استفاده نشود) دارای مجوز 644 خواهند بود.
ایجاد دایرکتوری
SFTP همچنین به شما اجازه استفاده از دو دستور lmkdir و mkdir را به ترتیب روی هر دو سیستم محلی و راه دور برای ایجاد دایرکتوری میدهد.
بقیه دستورات فایل فقط بر روی فایل سیستم راه دور قابل اجرا میباشند.
Iranshell@srv: sftp> ln
Iranshell@srv: sftp> rm
Iranshell@srv: sftp> rmdir
نتیجهگیری
اگرچه SFTP ابزاری ساده است، اما برای مدیریت سرورها و انتقال فایل بین آنها بسیار مفید است. به عنوان مثال، شما میتوانید با استفاده از SFTP این اجازه را به کاربران خاص بدهید تا بدون دسترسی به SSH قادر به انتقال فایل باشند. اگر شما عادت دارید از FTP یا SCP برای انجام انتقال فایل خود استفاده کنید. SFTP روش خوبی برای بالا بردن نقاط قوت هر دو میباشد. هرچند این راه حل برای هر موقعیتی مناسب نیست اما ابزار انعطافپذیری است که میتوانید مورد استفاده قرار دهید.
دیدگاهتان را بنویسید