مقدمه
در گذشته، FTP یا File Transfer Protocol یکی از رایجترین روشها برای انتقال فایل بین دو سیستم راه دور بود. اما این پروتکل به دلیل نداشتن رمزنگاری و ضعفهای امنیتی، از سال ۲۰۲۲ به بعد توسط اغلب نرمافزارهای مدرن کنار گذاشته شده و امروز تنها در سیستمهای قدیمی یا شبکههای کاملاً محدود استفاده میشود.
SFTP که مخفف Secure File Transfer Protocol است، پروتکلی مستقل اما مبتنی بر SSH محسوب میشود که امکان اجرای دستورات انتقال فایل را روی یک اتصال امن فراهم میکند. در اکثر سناریوهایی که قبلاً از FTP استفاده میشد، SFTP میتواند بدون دردسر جایگزین آن شود.
در تقریباً تمام شرایط، SFTP به دلیل امنیت بالاتر و استفاده از زیرساخت SSH، انتخاب بهتری نسبت به FTP است. FTP ذاتاً ناامن است و فقط در شرایط خاص یا شبکههای مورد اعتماد پیشنهاد میشود.
اگرچه SFTP در بسیاری از ابزارهای گرافیکی نیز وجود دارد، در این آموزش تمرکز ما بر استفاده از SFTP از طریق خط فرمان خواهد بود.
اتصال به سرور با SFTP
SFTP بهصورت پیشفرض از SSH برای احراز هویت و ایجاد اتصال امن استفاده میکند. به همین دلیل، تمام روشهای احراز هویت SSH از جمله رمز عبور و کلید SSH در SFTP نیز قابل استفاده هستند.
هرچند ورود با رمز عبور امکانپذیر است، اما دیدگاه بهشدت توصیه میکند از کلیدهای SSH استفاده کنید. این روش هم امنیت بالاتری دارد و هم در بلندمدت باعث صرفهجویی در زمان میشود.
اگر بتوانید از طریق SSH به سرور متصل شوید، عملاً تمام پیشنیازهای استفاده از SFTP را دارید. برای تست اتصال SSH از دستور زیر استفاده کنید:
ssh user@server_ipدر صورت موفق بودن اتصال، با دستور زیر خارج شوید:
exitحالا میتوانید جلسه SFTP را آغاز کنید:
sftp user@server_ipدر صورتی که SSH روی پورتی غیر از ۲۲ اجرا میشود:
sftp -oPort=custom_port user@server_ipدریافت راهنما در محیط SFTP
مهمترین دستور در SFTP، دستور راهنما است. با اجرای یکی از دستورات زیر، لیست کامل دستورات قابل استفاده نمایش داده میشود:
helpیا
?جابجایی در دایرکتوریها
برای مشاهده مسیر فعلی در سرور راه دور:
pwdبرای نمایش فایلها و پوشهها:
lsبرای نمایش اطلاعات کامل فایلها:
ls -laبرای تغییر مسیر:
cd directory_nameکار با فایلهای محلی
در SFTP میتوانید با افزودن حرف l به ابتدای دستورات، روی سیستم محلی کار کنید.
نمایش مسیر فعلی سیستم محلی:
lpwdنمایش فایلهای محلی:
llsتغییر مسیر محلی:
lcd Desktopدانلود فایل از سرور
برای دانلود یک فایل از سرور:
get remoteFileدانلود فایل با نام متفاوت:
get remoteFile localFileدانلود یک پوشه بهصورت بازگشتی:
get -r directoryحفظ مجوزها و زمان دسترسی:
get -Pr directoryآپلود فایل به سرور
برای ارسال فایل به سرور:
put localFileارسال پوشه کامل:
put -r localDirectoryبررسی فضای دیسک
برای بررسی فضای دیسک روی سرور:
df -hبرای اجرای دستورات محلی در محیط SFTP:
!و سپس:
df -hبرای بازگشت به محیط SFTP:
exitمدیریت ساده فایلها
تغییر مالک فایل (با UID):
chown uid fileتغییر گروه فایل:
chgrp gid fileتغییر سطح دسترسی:
chmod 777 fileتنظیم umask محلی:
lumask 022ایجاد پوشه:
mkdir remote_dir
lmkdir local_dirحذف فایل یا پوشه:
rm file
rmdir dirاستفاده از SFTP در توزیعهای مختلف لینوکس
Ubuntu / Debian
sudo apt update
sudo apt install openssh-server
sudo systemctl restart sshCentOS / RHEL
sudo yum install openssh-server
sudo systemctl start sshd
sudo systemctl enable sshdFedora
sudo dnf install openssh-server
sudo systemctl restart sshdراهاندازی یک سرور SFTP ساده
-
نصب سرویس SSH
-
فعال بودن Subsystem مربوط به SFTP در فایل sshd_config
-
ریاستارت سرویس SSH
-
ساخت کاربر محدود برای SFTP
خطاهای رایج و رفع آنها
Permission Denied
علت: نداشتن دسترسی نوشتن در مسیر مقصد
راهحل:
-
بررسی مجوزها با ls -ld
-
تغییر مالکیت با chown
-
اصلاح دسترسی با chmod
Connection Refused یا Timed Out
علت: مشکل شبکه یا غیرفعال بودن SSH
راهحل:
-
بررسی وضعیت سرویس SSH
-
بررسی IP و پورت
-
تست اتصال با ping و telnet
Host Key Verification Failed
راهحل:
-
حذف کلید قدیمی از فایل known_hosts
-
اتصال مجدد به سرور
سوالات متداول
SFTP چیست؟
SFTP پروتکلی امن برای انتقال و مدیریت فایلها است که بر پایه SSH کار میکند.
پورت پیشفرض SFTP چیست؟
پورت ۲۲
تفاوت SFTP با FTP چیست؟
SFTP رمزنگاری شده است اما FTP دادهها را بهصورت ساده ارسال میکند.
آیا میتوان SFTP را خودکار کرد؟
بله، با اسکریپتها یا ابزارهایی مانند lftp، Bash یا Python.
تهیه و بازنویسی اختصاصی توسط دیدگاه

