گیو سرور ارائه دهنده سرویس های ابری و VPS اختصاصی ایران و کانادا

چگونه از SFTP برای انتقال امن فایل ها در ریموت سرور استفاده کنیم

مقدمه

FTP مخفف “File Transfer Protocol” به معنی پروتکل انتقال فایل،یک روش محبوب برای انتقال فایل ها بین دو سیستم از راه دور است.

SFTP مخفف “SSH File Transfer Protocol” یا “Secure File Transfer Protocol” یک پروتکل جدا است که با SSH جمع شده و با همان مسیر اما با یک ارتباط امن کار میکند.مزیت آن این است که میتواند یک به یک مسیر امن برای جابجایی فایل ها و عبور دادن فایل سیستم ها بر روی سیستم مبدا و مقصد دسترسی پیدا کند.

تقریبا در تمام موارد،SFTP به FTP به دلیل ابزار امنیتی و توانایی تکیه کردن به SSH ترجیح داده میشود.FTP پروتکلی ناامن است که در مواردی که انتخاب ها محدود هستند و یا در شبکه ای که به آن اعتماد داریم استفاده میشوند.

اگرچه SFTP را میتوان از طریق رابط های گرافیکی بسیاری استفاده نمود،در این مقاله طریقه استفاده آن از خط دستور را اجرا میکنیم.

چگونه با SFTP متصل شویم

به طور پیشفرض SFTP از پروتکل SSH برای اعتبار سنجی و برقراری ارتباطی امن استفاده میکند.

پسوورد ها گزینه مناسبی برای تنظیم و استفاده در SSH هستند اما برای امنیت بیشتر،ساختن کلیدِ SSH یا SSH Key و ارسال کلید عمومی (Public Key) به سروری که میخواهید به آن دسترسی پیدا کنید،پیشنهاد میشود.

طریقه ساخت SSH Key ها را نیز میتوانید در آموزش ها بیابید.

اگر میتوانید از طریق SSH به ماشین مورد نظر متصل شوید،شما تمام پیشنیاز های اصلی برای استفاده از SFTP را دارید.با دستور زیر دسترسی SSH خود را آزمایش کنید:

اگر کار میکند با دستور زیر از آن خارج شوید:

با دستور زیر نیز میتوانیم ابتدا با SSH وصل شویم و سپس از طریق آن یک SFTP برقرار کنیم:

شما به سیستم وصل میشوید و خط دستور قبلی که احتمالا با علامت # به اتمام میرسید به خط دستور SFTP تغییر پیدا میکند.

اگر پورت SSH را تغییر دادید،میتوانید از طریق دستور زیر پورت مورد نظر برای اتصال را تعیین کنید:

این روش معرفی پورت برای زمانی است که مطمئن باشید در خط دستور سرور قرار دارید،نه قبل از ورود به آن از طریق نرم افزار هایی مانند PuTTy و یا Xshell.

کمک گرفتن در SFTP

بهترین روش برای یادگیری دستور help است.این دستور به شما خلاصه ای از دستورات SFTP میدهد.میتوانید از یکی از دستورات زیر را استفاده کنید:

و خروجی به شکل زیر خواهد بود:

برخی از دستورات بالا را در ادامه بررسی میکنیم.

مرور فایل ها با SFTP

میتوانیم از طریق دستوراتی مشابه با دستورات shell،فایلهای ماشینی که با SFTP به آن متصل شدیم را مرور کنیم.

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

و اگر در دایرکتوری root باشید،خروجی به شکل زیر خواهد بود:

میتوانیم محتویات پوشه ای که در آن قرار داریم را با دستور تکراریِ زیر مشاهده کنیم:

و خروجی را به شکل زیر:

یا به شکل زیر ببینید:

توجه داشته باشید که دستورات در SFTP دقیقا به شکل دستورات در shell به طور تمام و کمال عمل نمیکنند ولی بعضی از سوئیچ های مهم و اصلی را میتوان در آن پیاده سازی کرد:

برای تغییر دایرکتوری ای که در آن قرار داریم میتوانیم دستور زیر را به کار ببریم:

این دستور ما را به پوشۀ etc منتقل میکند.حال اگر بخواهیم به سیستمی که با آن به سیستم مورد نظر SFTP زدیم دسترسی پیدا کنیم چطور؟میتوانیم از حرف l در ابتدای دستورات مخففِ Local استفاده کنیم.

دستورات بالا نیز از این قضیه پیروی میکنند.میتوانیم مسیری که در سرور محلی خودمان در آن قرار داریم را با دستور زیر پیدا کنیم:

و خروجی زیر را دریافت کنیم:

همچنین میتوانیم با دستور زیر لیست محتویات موجود در مسیر سرور محلی را دریافت کنید:

خروجی هم لیست موارد موجود باشد:

به همین ترتیب نیز میتوانیم دایرکتوری را عوض کنیم:

انتقال فایل ها با SFTP

مرور فایل های دو سیستم وقتی نتوانیم فایل ها را انتقال دهیم امری بیهوده است.بنابراین به انتقال فایل ها بین این دو میپردازیم.

انتقال از سیستم راه دور (مقصد) به سیستم محلی (مبدا) یا دانلود

با دستور زیر،فایل موردنظر را از ریموت سیستم به سیستمی که از آن به سیستم مقصد SFTP زدیم،منتقل میکنیم:

و پس از پایان پروسه انتقال،خروجی ای مشابه خروجی زیر میبینیم:

همانطور که مشاهده میکنید،دستور get فایل مورد نظر را بدون تغییر نام و در همان مسیری که در سیستم محلی در آن قرار داریم بارگذاری میشود.

اگر بخواهیم نام آن عوض شود میتوانیم با فرمت زیر آنرا بنویسیم:

اولی اسم فایل در سیستم مقصد و دومی نامی است که میخواهیم با آن ذخیره شود.یا محل ذخیره سازی را نیز در آن مشخص کنیم.

یا با سوئیچ زیر میتوانیم یک دایرکتوری را با محتویات آن جابجا کنیم:

میتوان با سوئیچ p- یا P- دسترسی ها و Permission های لازم را به فایلها داد:

انتقال از سیستم محلی (مبدا) به سیستم راه دور (مقصد) یا آپلود

ارسال فایل به سیستم مقصد به راحتی عمل قبلیست.با دستور put میتوانیم به این امر دستیابیم.

و خروجی ای این چنینی را مشاهده کنیم:

سوئیچ ها نیز به همان شکل که در get استفاده میشدند میتوانند مورد استفاده قرار گیرند:

نکته: در نسخه های پایینتر Ubuntu (بین ۱۴٫۰۴ تا ۱۵٫۱۰)،برنامه OpenSSH یک باگ همراه خود داشت که اجرای دستور بالا را با مشکل روبرو میکرد.هنگام وارد کردن آن در نسخه های وقت،خروجی زیر دریافت میشد:

برای درست کردنِ این اشکال،در پوشه مقصد پوشه ای با نام پوشه ای که قرار است ارسال کنید بسازید:

دیگر دستور پراستفاده در دانلود و آپلود فایل ها دستور df که اشاره به Disk Free دارد است.با سوئیچ h نیز میتوانید حجم هارا قابل شناختن توسط انسان ببینید:

با وارد کردن ! در خط دستور،وارد shell ای میشوید که با آن به سرور مقصد SFTP زدید.

با این دستور نیاز نیست تا به طور کامل از سرور مقصد جدا شده و به خاطر عملی کوتاه ارتباط را قطع و دوباره وصل کنیم.

با دستور exit نیز میتوانیم از shell ای که به آن با ! برگشتیم خارج شویم و به سرور SFTP بازگردیم:

دستکاری ساده فایل ها با SFTP

SFTP به شما اجازه میدهد تا دسترسی های اولیه ی فایل هارا تغییر دهید.این کار زمانی مفید است که با فایلهایی با دسترسی های سلسله وار (Hirearchy Files) سر و کار دارید.

برای مثال،میتوانید با دستور زیر،مالک فایل موردنظر را تغییر دهید:

توجه کنید که برخلاف chmod در shell،در SFTP باید به جای نامِ یوزر،UID آن را استفاده کنیم.که البته یافتن آن از طریق SFTP کار ساده ای نیست.

یکی از روش های پیشنهادی میتواند این باشد که فایل حاوی اطلاعات کاربران منسوب به passwd را دانلود کنیم و محتویات آنرا از طریق ssh بررسی کنیم و UID مورد نظر را در آن پیدا کنیم.

و خروجی هر خط در این فایل که در آن،عبارت درون “” باشد را نشان میدهد:

UID مورد نظر ستون سوم این خروجی از چپ میباشد یعنی ۱۰۰۱ و ۱۰۰۲٫

توجه کنید که با ! در اول دستور،به جای ورود کامل به shell سرور مبدا،دستور اجرا شد و برگشتیم.این شرایط برای تمامی دستوراتی که در ماشین مبدا قابل اجرا است صدق میکند.

همچنین میتوان گروه مالک فایل را نیز عوض کرد:

همانطور که متوجه شدید،بازهم به جای اسم گروه ها باید از شماره آنها استفاده کنیم که به دست آوردن آن با روش قبلی قابل انجام است:

خروجی نیز به این شکل:

که ستون اول نام گروه و ستون سوم شماره آن گروه و مورد نظر ما است.

و بالاخره،دستور chmod به همان شکل که انتظار داریم کار میکند:

در SFTP دستوری برای تغییر دسترسی های فایل های مبدا نیست،اما شما میتوانید umask محلی را تغییر دهید تا فایل های کپی شده در فایل مبدا دسترسی های لازم را دارند.

با دستور lumask میتوانید این کار را انجام دهید:

با این دستور،فایل های دانلود شده (مگر با سوئیچ p- ) با دسترسی ۶۴۴ خواهند بود.

همچنین با دستورات “mkdir” و “lmkdir” میتوانید برای سیستم مقصد و مبدا دایرکتوری ایجاد کنید.به همان شکل که باید ساخته میشوند.

دستورات زیر فقط برای سیستم مقصد اجرا میشوند:

این دستورات به همان نحوی که در shell اجرا میشوند،عمل میکنند.برای اجرای آنها در سیستم مبدا،بهتر است از ! استفاده کنیم تا به سیستم مبدا دسترسی یابیم.

 

پس از اتمام کارتان با SFTP،با دستور bye یا exit به ارتباط پایان دهید.

نتیجه

اگرچه کار با SFTP ساده است،اما ابزار مفیدی برای مدیریت سرور ها و انتقال فایل بین آنهاست.

برای مثال،میتوانید از SFTP برای کاربران این قابلیت را به وجود بیاورید که بدون دسترسی SSH فایل انتقال دهند.

اگر برای انتقال هایتان از FTP یا SCP استفاده میکنید، SFTP راه مناسبی برای ترکیب قدرت هردو آنهاست.اگرچه برای تمام شرایط مناسب نیست،اما ابزار مناسبی برای سیستم سرور شما میباشد.