پروتکل انتقال فایل (FTP) زمانی روشی پرکاربرد برای انتقال فایلها یا دادهها از راه دور بود. با این حال، اطلاعات را در قالبی رمزگذاری نشده منتقل مینمود که آن را به روشی ناامن برای برقراری ارتباط تبدیل میکند. همانطور که همه میدانیم، FTP امن نیست زیرا همه انتقالها به صورت متن واضح رخ میدهند، به این معنی که هر کسی که بستههای شبکه را شنود میکند، میتواند به راحتی دادهها را بخواند.
به همین دلیل، FTP فقط باید در موارد محدود یا در شبکههایی که کاملا به آنها اعتماد دارید استفاده شود. با گذشت زمان، پروتکلهایی مانند SCP و SSH با معرفی لایههای رمزگذاری شده برای انتقال ایمن دادهها بین سیستمهای از راه دور، این نگرانیهای امنیتی را برطرف کردهاند.
sFTP چیست؟
sFTP مخفف Secure File Transfer Protocol و بخشی از مجموعه پروتکل SSH است که به طور پیشفرض بر روی پروتکل SSH در پورت استاندارد ۲۲ اجرا میشود تا یک اتصال امن برقرار کند. SFTP در بسیاری از ابزارهای رابط کاربری گرافیکی مانند FileZilla، WinSCP و FireFTP ادغام شده است.
شما میتوانید با استفاده از دستور sftp که اغلب در اکثر توزیعهای لینوکس از قبل نصب شده است، از طریق ترمینال لینوکس به sFTP دسترسی پیدا کنید.
which sftp
اگر این دستور مسیری مانند usr/bin/sftp/ را برمیگرداند، مشکلی نیست.
هشدار امنیتی: لطفا پورت SSH را در معرض اینترنت عمومی قرار ندهید، زیرا یک خطر امنیتی است. در عوض، فقط به آدرسهای IP خاصی که برای انتقال یا مدیریت فایلها در سیستم از ریموت استفاده میشوند، اجازه دسترسی بدهید.
این مطلب شما را با نمونههای واقعی دستور sFTP، از ورود به سیستم و پیمایش دایرکتوریها گرفته تا آپلود و دانلود فایلها، آشنا میکند. ما همچنین نکات مربوط به انتقال دستهای، اسکریپتنویسی و اتوماسیون با استفاده از sFTP را پوشش خواهیم داد.
۱. نحوه اتصال به SFTP
به طور پیشفرض، از همان پروتکل SSH برای تایید اعتبار و ایجاد اتصال SFTP استفاده میشود. برای شروع یک جلسه SFTP، نام کاربری و نام میزبان یا آدرس IP راه دور را در خط فرمان وارد کنید.
پس از موفقیتآمیز بودن احراز هویت، یک شل با پرامپت <sftp مشاهده خواهید کرد.
sftp parsdev@192.168.122.206
اگر SSH روی یک پورت سفارشی (مثلا ۲۲۲۲) اجرا میشود، از موارد زیر استفاده کنید:
sftp -oPort=2222 parsdev@192.168.122.206
هنگامی که در پرامپت sftp هستید، با تایپ کردن ? یا help در اعلان فرمان، دستورات موجود را بررسی کنید.
sftp> ?
۲. بررسی دایرکتوری کاری فعلی
هنگامی که از طریق sFTP به یک سرور ریموت متصل میشوید، مهم است که بدانید کجا هستید – هم به صورت لوکال (روی دستگاه خود) و هم از راه دور (روی سرور). sFTP دو دستور ساده lpwd و pwd برای این منظورایجاد شدهاند.
دستور lpwd (چاپ دایرکتوری کاری لوکال) برای نمایش دایرکتوری محلی فعلی شما در دستگاه خودتان که از آن کار میکنید استفاده میشود. از سوی دیگر، دستور pwd (چاپ دایرکتوری کاری) دایرکتوری فعلی شما را در سرور راه دور نشان میدهد.
در اینجا نحوه نمایش آنها در یک جلسه فعال sFTP آمده است:
sftp> lpwd Local working directory: / sftp> pwd Remote working directory: /parsdev/
- lpwd به شما کمک میکند تا تایید کنید که فایلها در کجا دانلود خواهند شد.
 - pwd به شما کمک میکند تا تایید کنید که فایلها از کجا آپلود خواهند شد.
 
درک این دستورات به ویژه زمانی مفید است که در حین انتقال فایل، چندین دایرکتوری را پیمایش میکنید.
۳. فهرست کردن فایلها با sFTP
هنگامی که با استفاده از sFTP به یک سرور راه دور متصل میشوید، اغلب باید دایرکتوریها را مرور کنید تا فایلهای موجود در سیستم ریموت و دستگاه لوکال خود را بررسی کنید.
برای لیست کردن فایلها در سرور ریموت، کافیست از دستور ls استفاده کنید که محتویات دایرکتوری فعلی در میزبان راه دور را نشان میدهد.
sftp> ls
اگر میخواهید اطلاعات دقیق فایل مانند اندازه و پرمیشن را ببینید، میتوانید از گزینه l- نیز استفاده کنید:
sftp> ls -l
حال، اگر میخواهید فایلهای سیستم لوکال خود (دستگاهی که sFTP را از آن اجرا میکنید) را فهرست کنید، از دستور lls استفاده خواهید کرد که مانند دستور ls معمولی عمل میکند اما محتویات دایرکتوری محلی شما را نشان میدهد.
sftp> lls
همچنین میتوانید گزینههایی را به lls ارسال کنید تا فایلها را با فرمت طولانی فهرست کنید:
sftp> lls -l
استفاده همزمان از ls و lls به شما کمک میکند تا فایلها را به طور موثر بین سیستمهای لوکال و ریموت در رابط sFTP مدیریت کنید.
۴. آپلود فایل با استفاده از sFTP
پس از اتصال به سرور راه دور با استفاده از دستور sftp، میتوانید از دستور put برای آپلود یک فایل استفاده کنید. به عنوان مثال، فرض کنید فایلی به نام local.parsdev در دستگاه محلی خود دارید و میخواهید آن را به سرور راه دور منتقل کنید.
put local.parsdev
هنگامی که این دستور را اجرا میکنید، sFTP فایل را از دایرکتوری محلی فعلی شما به دایرکتوری فعلی در سرور راه دور آپلود میکند.
باید خروجی مشابه زیر را مشاهده کنید:
Uploading local.parsdev to /home/username/local.parsdev
اگر میخواهید چندین فایل را به طور همزمان آپلود کنید، میتوانید از کاراکترهای wildcard با دستور mput استفاده کنید. به عنوان مثال، برای آپلود همه فایلهای txt. از دایرکتوری محلی فعلی:
mput *.txt
نکته: قبل از آپلود، همیشه خوب است که دایرکتوریهای کاری لوکال و ریموت خود را به ترتیب با استفاده از دستورات lcd و cd بررسی و تنظیم کنید.
برای مثال:
lcd /home/user/documents cd /var/www/html put index.html
۵. دانلود فایلها با استفاده از sFTP
برای دانلود یک فایل از سیستم ریموت به دایرکتوری لوکال فعلی خود، از دستور get و به دنبال آن نام فایل استفاده کنید.
sftp> get SettlementReport_1-10th.xls
اگر میخواهید چندین فایل را به طور همزمان دانلود کنید، میتوانید از دستور mget استفاده کنید، که به ویژه زمانی مفید است که با مجموعهای از گزارشها، گزارشها یا فایلهای داده سروکار دارید:
sftp> mget *.xls
دستور mget از الگوهای wildcard مانند xls.* برای گرفتن تمام فایلهای با پسوند xls. از دایرکتوری ریموت و کپی کردن آنها در دایرکتوری کاری محلی شما استفاده میکند.
۶. تغییر نام فایلها هنگام دانلود با استفاده از sFTP
به طور پیشفرض، دستور get فایل را با نام اصلی آن دانلود میکند. با این حال، اگر میخواهید فایل را با نام دیگری به صورت لوکال ذخیره کنید، میتوانید یک آرگومان دوم با نام دلخواه تعیین کنید.
sftp> get MyReport-07th.xls Report_Jul.xls
در این حالت، فایل راه دور MyReport-07th.xls به صورت محلی با نام Report_Jul.xls دانلود و ذخیره میشود.
۷. تغییر دایرکتوریها در sFTP
برای تغییر دایرکتوری راه دور (دایرکتوری روی سروری که به آن متصل هستید)، از دستور cd و به دنبال آن مسیر مورد نظر استفاده کنید.
sftp> cd test
شما میتوانید با اجرای دستور زیر، مکان فعلی خود را در سیستم راه دور تایید کنید:
sftp> pwd
به طور مشابه، برای تغییر به یک دایرکتوری لوکال متفاوت (فایل سیستم دستگاه فعلی)، از دستور lcd استفاده کنید:
sftp> lcd Documents
برای تایید تغییر دایرکتوری لوکال، میتوانید دستور زیر را اجرا کنید:
sftp> lpwd
۸. ایجاد دایرکتوریها با استفاده از sFTP
برای ایجاد یک دایرکتوری جدید در سرور راه دور، میتوانید از دستور mkdir در داخل خط فرمان sFTP استفاده کنید:
mkdir test
این دستور یک دایرکتوری به نام test در دایرکتوری کاری فعلی در سرور راه دور ایجاد میکند. سپس میتوانید با استفاده از put فایلها را در این دایرکتوری آپلود کنید یا با استفاده از cd به آن تغییر دهید.
از طرف دیگر، اگر میخواهید در حین جلسه sFTP، یک دایرکتوری در دستگاه محلی خود ایجاد کنید، از دستور lmkdir استفاده کنید:
lmkdir VPS
این دستور یک دایرکتوری به نام VPS در دایرکتوری کاری محلی فعلی شما ایجاد میکند. میتوانید قبل از دانلود چندین فایل در یک پوشه اختصاصی با استفاده از دستور mget از این دستور استفاده کنید.
خرید VPS لینوکس با دسترسی کامل SSH و منابع اختصاصی، مناسب برای برنامهنویسان، توسعهدهندگان و مدیران سایت در پارسدو فراهم است.
۹. حذف دایرکتوریها با استفاده از sFTP
برای حذف یک فایل، از دستور rm در داخل خط فرمان sFTP استفاده کنید. برای مثال، اگر میخواهید فایلی به نام Report.xls را از دایرکتوری ریموت فعلی حذف کنید، دستور زیر را اجرا کنید:
rm Report.xls
برای حذف یک دایرکتوری، از دستور rmdir استفاده کنید.
rmdir sub1
نکته مهم: sFTP فقط میتواند دایرکتوریهای خالی را حذف کند. اگر دایرکتوری حاوی فایلها یا زیردایرکتوریها باشد، ابتدا باید آن محتویات را با استفاده از rm حذف کنید یا آنها را به صورت بازگشتی با استفاده از ابزارهای دیگر مانند SSH یا rsync حذف کنید.
بنابراین قبل از حذف هر دایرکتوری، مطمئن شوید که خالی است. در غیر این صورت، دستور rmdir با خطایی مانند زیر مواجه خواهد شد:
rmdir failed: Directory not empty
استفاده از sFTP با کلیدهای SSH (بدون درخواست رمز عبور)
اگر میخواهید از تایپ رمز عبور خود هر بار که از طریق sFTP متصل میشوید، اجتناب کنید، میتوانید احراز هویت مبتنی بر کلید SSH را با استفاده از جفت کلید SSH در دستگاه محلی خود تنظیم کنید.
ssh-keygen -t rsa -b 4096
شما میتوانید به سادگی Enter را فشار دهید تا مکان پیشفرض فایل (~/.ssh/id_rsa) را بپذیرید و به صورت اختیاری یک عبارت عبور تنظیم کنید که دو فایل ایجاد میکند: یک کلید خصوصی (id_rsa) و یک کلید عمومی (id_rsa.pub).
در مرحله بعد، کلید عمومی خود را با استفاده از موارد زیر در سرور راه دور کپی کنید:
ssh-copy-id user@remote_host
پس از انجام این کار، میتوانید بدون وارد کردن رمز عبور، با استفاده از sFTP به سرور متصل شوید:
sftp user@remote_host
۱۰. خروج از شِل sFTP
برای خروج از شِل sFTP و پایان دادن به جلسه خود با سرور راه دور، کافیست تایپ کنید:
bye Or exit
اما یک ترفند مفید دیگر نیز وجود دارد که باید بدانید.
اگر در یک جلسه sFTP هستید و نیاز دارید که به طور موقت بدون قطع اتصال از جلسه sFTP راه دور، به شِل لینوکس محلی خود بروید، میتوانید از دستور ! استفاده کنید که به شما امکان میدهد دستورات محلی لینوکس را مستقیم از داخل محیط sFTP اجرا کنید.
sftp> !
اکنون میتوانید هر دستور معمولی لینوکس را اجرا کنید.
ls -l
وقتی کارتان با شِل محلی تمام شد و خواستید به خط فرمان sFTP برگردید، کافیست تایپ کنید:
exit
پس از اجرای exit، همانطور که نشان داده شده است به جلسه sFTP باز خواهید گشت:
exit Shell exited with status 1 sftp>
در نهایت، وقتی آماده شدید تا جلسه sFTP را به طور کامل ترک کنید، دستور زیر را اجرا کنید:
sftp> bye
جمعبندی
در مجموع، SFTP یکی از ایمنترین و کارآمدترین روشها برای انتقال و مدیریت فایلها میان سیستمهای محلی و سرورهای راهدور است. با استفاده از این پروتکل، میتوانید دادهها را با حفظ امنیت و محرمانگی منتقل کنید و عملیات مدیریتی مانند بارگذاری، دانلود و ویرایش فایلها را بهسادگی انجام دهید. بهرهگیری از SFTP در محیطهای کاری و سروری، نهتنها امنیت تبادل اطلاعات را افزایش میدهد بلکه موجب صرفهجویی در زمان و بهبود فرآیندهای مدیریتی نیز میشود.