آموزش وردپرس

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

وحید بهنام14 دقیقه مطالعه0 بازدید0 دیدگاه

اگر تا به حال برای انتقال ایمن فایل های حساس به سرورهای راه دور با تردید یا سردرگمی مواجه شده اید، اینجا جای شماست. SFTP یک پروتکل استاندارد است که با رمزگذاری کامل، امکان بارگذاری و دریافت داده ها را بدون خطر نفوذ فراهم می کند.

در ادامه، گام به گام نحوهٔ پیکربندی کلاینت، ایجاد کلیدهای SSH و تنظیمات سرور را بررسی می کنیم تا بتوانید به سرعت و با اطمینان کار کنید. همچنین نکات عملی برای عیب یابی اتصال، بهینه سازی سرعت انتقال و حفظ امنیت کلیدها را در اختیار شما می گذاریم. با این راهنمای جامع، می توانید از قدرت SFTP به عنوان ابزار اصلی انتقال داده های حساس در پروژه های خود بهره برداری کنید. پس از مطالعه این مقاله، هر بار که نیاز به ارسال فایل های مهم داشته باشید، با اطمینان می توانید فرآیند را به صورت خودکار و بدون نگرانی اجرا کنید.

فهرست مطالب

تعریف دقیق SFTP و تفاوت ها

SFTP مخفف SSH File Transfer Protocol است و به عنوان یک پروتکل انتقال فایل مبتنی بر SSH (Secure Shell) طراحی شده است. این پروتکل تمام داده ها را شامل نام کاربری، رمز عبور و محتوای فایل ها به صورت رمزگذاری شده منتقل می کند، به طوری که حتی اگر ترافیک توسط شخصی رهگیری شود، اطلاعات قابل خواندن نخواهد بود. به علاوه، SFTP یک اتصال تک پورت (پورت پیش فرض ۲۲) استفاده می کند که مدیریت فایروال ها را ساده می سازد.

در مقایسه با FTP کلاسیک، تفاوت های اساسی وجود دارد. FTP داده ها را به صورت متن ساده (plain text) ارسال می کند؛ به همین دلیل اعتبارسنجی و محتوای فایل ها به راحتی می توانند توسط افراد غیرمجاز خوانده شوند. همچنین FTP دو پورت جداگانه (پورت ۲۱ برای کنترل و یک یا چند پورت برای داده) استفاده می کند که در محیط های با تنظیمات فایروال سخت گیرانه مشکلاتی ایجاد می کند.

ویژگیFTPFTPSSFTP
رمزگذاریبدون رمزگذاریSSL/TLS (اختیاری)SSH (الزامی)
پورت پیش فرض۲۱ (کنترل) + پورت های داده۲۱ یا ۹۸۸ (TLS)۲۲
سازگاری فایروالدست وپاگیری بالاپیکربندی پیچیده ترساده، تک‑پورت
حمایت از دستورات مدیریت فایلمحدودمتوسطپشتیبانی کامل (rename, chmod, …)

یکی از رایج ترین سناریوهای کاربردی SFTP، بارگذاری وب سایت ها به سرورهای میزبانی است. برای مثال، یک توسعه دهنده می تواند با استفاده از کلاینت گرافیکی FileZilla یا خط فرمان sftp user@host به سرعت به پوشه /var/www/html متصل شود، فایل های استاتیک را انتقال دهد و حتی دسترسی های chmod را تنظیم کند. نکتهٔ عملی این است که کلیدهای SSH را به جای رمز عبور استفاده کنید؛ این کار امنیت را بالا می برد و نیاز به وارد کردن پسورد در هر بار اتصال را از بین می برد.

پیکربندی پایه سرور SFTP

برای شروع کار با SFTP، ابتدا باید سرویس SSH را که پایهٔ انتقال فایل امن است نصب کنید. در اکثر توزیع های لینوکس می توانید با دستور apt-get install openssh-server یا yum install openssh-server این کار را انجام دهید. پس از نصب، سرویس به صورت پیش فرض بر روی پورت ۲۲ فعال می شود و می توانید از همان تنظیمات پایه برای انتقال فایل استفاده کنید.

به منظور جداسازی دسترسی ها، بهتر است یک کاربر مخصوص SFTP ایجاد کنید و آن را در یک گروه جداگانه قرار دهید. مثال زیر یک کاربر به نام sftpuser و گروه sftpgrp می سازد و دایرکتوری خانهٔ آن را به /var/sftp/uploads محدود می کند:

CODE
addgroup sftpgrp
adduser --home /var/sftp/uploads --shell /usr/sbin/nologin --ingroup sftpgrp sftpuser
chmod 750 /var/sftp
chmod 755 /var/sftp/uploads
chown root:sftpgrp /var/sftp
chown sftpuser:sftpgrp /var/sftp/uploads

دقت کنید که مالک ریشهٔ دایرکتوری /var/sftp باید root باشد تا قابلیت chroot (قفل کردن کاربر در یک مسیر) به درستی عمل کند.

سپس فایل پیکربندی sshd_config را برای فعال سازی SFTP به صورت اختصاصی و محدود کردن دسترسی ها ویرایش می کنیم. مهم ترین خطوط به صورت زیر هستند:

دستورمقدار پیشنهادیتوضیح
Subsystem sftp /usr/lib/openssh/sftp-serverپیش فرضمسیر برنامهٔ SFTP
Match Group sftpgrpتنظیمات مخصوص کاربرانی که در این گروه هستند
ChrootDirectory /var/sftpقفل کردن مسیر ریشه برای این گروه
ForceCommand internal-sftpاجبار استفاده از زیرسیستم SFTP فقط
AllowTCPForwarding noغیرفعال سازی تونل سازی SSH برای امنیت بیشتر

پس از ذخیرهٔ تغییرات، سرویس SSH را مجدداً بارگذاری می کنیم: systemctl restart sshd یا service ssh restart. این کار تنظیمات جدید را فعال می سازد.

برای اطمینان از صحت پیکربندی، می توانید با یک کلاینت SFTP (مثلاً sftp sftpuser@your-server) وصل شوید و پوشهٔ uploads را بررسی کنید. استفاده از کلیدهای عمومی‑خصوصی به جای رمز عبور ساده، امنیت انتقال را به طور چشمگیری ارتقا می دهد؛ کافی است کلید عمومی را در فایل ~sftpuser/.ssh/authorized_keys قرار دهید و دسترسی های ۶۴۰ را تنظیم کنید. پس از این مراحل، سرور SFTP شما آمادهٔ دریافت و ارسال فایل ها به صورت امن است.

ایجاد حساب کاربری و تنظیم دسترسی ها

در محیط های میزبانی که از SFTP استفاده می شود، ایجاد حساب کاربری جداگانه برای هر فرد یا سرویس، پایه ای برای امنیت است. این حساب ها نباید با حساب های سیستمی عمومی که برای ورود به سرور استفاده می شوند، ترکیب شوند؛ چرا که هرگونه دسترسی نامحدود می تواند به خطرات جدی منجر شود. بنابراین، ابتدا یک کاربر مخصوص SFTP تعریف می کنیم و سپس دسترسی های او را دقیقاً به پوشه های مورد نیاز محدود می کنیم.

برای ایجاد حساب کاربری می توانید از دستور adduser یا useradd در توزیع های لینوکسی استفاده کنید. به عنوان مثال:

CODE
sudo adduser sftp_user
sudo mkdir -p /srv/sftp/site
sudo chown root:root /srv/sftp
sudo chmod 755 /srv/sftp
sudo chown sftp_user:sftp_user /srv/sftp/site

در اینجا پوشه /srv/sftp/site به عنوان ریشه (chroot) برای کاربر تعریف می شود؛ به این معنی که کاربر نمی تواند به مسیرهای بالاتر از این دایرکتوری دسترسی پیدا کند.

تنظیم دسترسی ها با دو بخش اصلی انجام می شود: سطح فایل‑سیستم و سطح سرویس SFTP. برای سطح فایل‑سیستم، با استفاده از دستورات chmod و chown، حقوق خواندن، نوشتن و اجرای فایل ها را به دقت تعریف کنید. در سطح سرویس، می توانید در فایل /etc/ssh/sshd_config بخش زیر را اضافه کنید تا تنها این کاربر از پروتکل SFTP استفاده کند و دسترسی به شل غیرفعال شود:

CODE
Match User sftp_user
    ForceCommand internal-sftp
    PasswordAuthentication no
    ChrootDirectory /srv/sftp

یک مثال کاربردی: یک توسعه دهنده وب می خواهد محتواهای سایت را به روزرسانی کند. با ایجاد کاربر sftp_developer و محدود کردن دسترسی او به /srv/sftp/site، می توانید اطمینان حاصل کنید که او فقط می تواند فایل های داخل این پوشه را بارگذاری یا ویرایش کند، بدون آنکه به سایر بخش های سرور دسترسی داشته باشد. برای این کار کافیست مجوزهای 755 برای پوشه والد و 755 یا 775 برای پوشه سایت تنظیم شود، بسته به نیاز به دسترسی نوشتن برای گروه.

نکتهٔ مهمی که اغلب نادیده گرفته می شود، استفاده از کلیدهای SSH به جای رمز عبور برای احراز هویت است. کلید عمومی را در فایل ~sftp_user/.ssh/authorized_keys قرار دهید و در بخش پیکربندی سرویس، گزینهٔ PasswordAuthentication no را فعال کنید. این کار نه تنها امنیت را بالا می برد، بلکه خطر حملات brute‑force را به طور چشمگیری کاهش می دهد.

اتصال کلاینت به سرور با نرم افزارهای رایج

برای استفاده از SFTP، انتخاب یک کلاینت مناسب نقش کلیدی دارد؛ ابزار انتخابی باید با سیستم عامل شما سازگار باشد و قابلیت پیکربندی کلیدهای SSH را داشته باشد. در محیط ویندوز، برنامه های معروفی همچون FileZilla، WinSCP و Cyberduck به خوبی شناخته شده اند، در حالی که کاربران مک و لینوکس می توانند از برنامه های گرافیکی یا خط فرمان OpenSSH بهره ببرند.

در ادامه به صورت خلاصه ویژگی های چهار کلاینت پرکاربرد اشاره می کنیم:

  • FileZilla – رابط کاربری ساده، پشتیبانی از Drag‑&‑Drop و قابلیت ذخیره سازی چندین سایت.
  • WinSCP – امکان انتقال همزمان چندین فایل، ادغام با PuTTY برای مدیریت کلیدهای SSH و نمایش پیش نمایش فایل ها.
  • Cyberduck – طراحی مدرن، پشتیبانی از سرویس های ابری (مانند Amazon S3) و قابلیت افزودن پلاگین ها.
  • OpenSSH (خط فرمان) – سبک ترین گزینه برای سرورهای لینوکس، مناسب اسکریپت نویسی و اتوماسیون.

اگر از FileZilla استفاده می کنید، مراحل اتصال به سرور SFTP به شکل زیر است:

  1. برنامه را باز کنید و از منوی File → Site Manager یک سایت جدید اضافه کنید.
  2. در تب General، پروتکل را SFTP - SSH File Transfer Protocol انتخاب کنید.
  3. آدرس سرور (مثلاً sftp.example.com)، نام کاربری و پورت (معمولاً ۲۲) را وارد کنید.
  4. در بخش Logon Type گزینه Key file را برگزیده و مسیر فایل کلید خصوصی تان (مثلاً ~/.ssh/id_rsa) را مشخص کنید؛ اگر کلید ندارید می توانید از Normal برای وارد کردن رمز عبور استفاده کنید.
  5. با کلیک روی Connect اتصال برقرار می شود و می توانید فایل ها را به راحتی کشیده و رها کنید.

به یاد داشته باشید که استفاده از احراز هویت مبتنی بر کلید، امنیت اتصال را به مراتب بالا می برد؛ کلیدهای RSA یا Ed25519 به خصوص برای جلوگیری از حملات brute‑force مناسب اند. اگر مجبور به استفاده از رمز عبور می شوید، حتماً یک رمز قوی (حداقل ۱۲ کاراکتر، ترکیبی از حروف بزرگ، کوچک، عدد و علامت) انتخاب کنید و در صورت امکان محدودیت دسترسی بر اساس آدرس IP سرور خود اعمال کنید.

نرم افزارسیستم عاملپشتیبانی از کلیدقابلیت های ویژه
FileZillaویندوز، macOS, Linuxبلهمدیریت سایت های متعدد، رابط Drag‑&‑Drop
WinSCPویندوزبلهادغام با PuTTY، پیش نمایش فایل
CyberduckmacOS, Windowsبلهپشتیبانی از سرویس های ابری، افزونه پذیری
OpenSSHLinux, macOS, Windows (WSL)بلهخط فرمان، اسکریپت نویسی، کم حجم

انتقال فایل با دستورات SFTP

برای انتقال فایل ها با SFTP کافی است یک ترمینال باز کنید و از دستور sftp به همراه نام کاربری و آدرس سرور استفاده کنید. قالب متداول اتصال به شکل sftp user@host است؛ اگر پورت پیش فرض ۲۲ متفاوت باشد، گزینه -P را به همراه شماره پورت اضافه می کنید. پس از وارد کردن گذرواژه یا کلید خصوصی، یک پوسته تعاملی SFTP باز می شود که می توانید دستورات فایل‑محور را اجرا کنید.

در محیط SFTP دستورات پایه ای مانند ls (لیست محتویات پوشه)، cd (تغییر پوشه)، get (دریافت فایل از سرور) و put (ارسال فایل به سرور) در دسترس هستند. برای مثال، برای بارگذاری یک فایل index.html در پوشهٔ /var/www/html سرور، ابتدا با cd /var/www/html به مسیر مقصد می روید و سپس put index.html را اجرا می کنید. عملیات دانلود نیز به صورت معکوس با cd به پوشهٔ محلی و سپس get remote_file انجام می شود.

اگر نیاز به انتقال چندین فایل به صورت خودکار دارید، می توانید از حالت batch استفاده کنید. با گزینه -b می توانید مسیر یک فایل متنی حاوی دستورات SFTP را بدهید؛ هر خط از این فایل یک فرمان (مانند put یا get) است که به صورت پشت‑سر هم اجرا می شود. نمونهٔ سادهٔ یک فایل batch به شکل زیر است:

CODE
# batch.txt
cd /remote/path
put local1.txt
put local2.jpg
cd /another/remote
get remote.log

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

گزینهکاربرد
-P مشخص کردن پورت غیر پیش فرض
-i استفاده از کلید خصوصی برای احراز هویت
-Cفعال سازی فشرده سازی داده ها برای سرعت بیشتر
-b اجرای دستورات از فایل batch

نکتهٔ عملی: برای جلوگیری از تکرار ورود گذرواژه، کلیدهای SSH را روی کلاینت خود تولید کنید و کلید عمومی را به فایل ~/.ssh/authorized_keys سرور اضافه کنید؛ سپس با sftp -i ~/.ssh/id_rsa user@host می توانید بدون رمز عبور متصل شوید. این روش نه تنها امنیت را افزایش می دهد، بلکه اسکریپت های خودکار را ساده تر می کند.

بررسی خطاها و بهینه سازی عملکرد

در هنگام استفاده از SFTP، خطاهای رایجی مانند Authentication failed، Permission denied و Connection timed out به سراغ شما می آیند. اولین مورد معمولاً نشان دهنده اشتباه در نام کاربری یا کلید خصوصی است؛ دومین مورد به سطوح دسترسی روی سرور مربوط می شود و سومین مورد می تواند نشانه ای از مسدود شدن پورت ۲۲ توسط فایروال یا عدم دسترسی شبکه باشد. شناخت دقیق این پیام ها اولین گام برای رفع مشکل است.

برای عیب یابی می توانید این مراحل را به صورت گام به گام دنبال کنید:

  1. اطلاعات ورود (نام کاربری، کلید یا رمز عبور) را دوباره بررسی کنید؛ در صورت استفاده از کلید، مطمئن شوید که کلید عمومی روی سرور ثبت شده باشد.
  2. با گزینه -v (verbose) اتصال را اجرا کنید؛ خروجی تفصیلی می تواند مکان دقیق شکست را نشان دهد.
  3. از دسترسی پورت ۲۲ اطمینان حاصل کنید؛ اگر از NAT یا فایروال استفاده می کنید، قانون مربوط به ترافیک خروجی/ورودی را باز کنید.
  4. کلید میزبان (host key) سرور را با مقدار شناخته شده مقایسه کنید؛ در صورت تغییر، با مدیر سرور هماهنگ شوید.

بهینه سازی عملکرد SFTP نیز به خصوص در انتقال حجم بزرگ فایل ها اهمیت دارد. فعال سازی فشرده سازی با پارامتر -C می تواند تا ۲۵٪ زمان انتقال را کاهش دهد، به شرطی که سرور نیز این ویژگی را پشتیبانی کند. تنظیم ssh_config برای افزایش TCP window size و استفاده از الگوریتم های رمزنگاری سریع تر (مانند aes128-ctr) نیز سرعت را بالا می برد. برای بهبود مقیاس پذیری، ابزارهایی مثل lftp یا rsync که قابلیت انتقال موازی دارند، می توانند چندین اتصال SFTP را همزمان باز کرده و زمان کل عملیات را به طور چشمگیری کاهش دهند.

در جدول زیر رایج ترین خطاها، علل محتمل و راه حل های پیشنهادی خلاصه شده اند:

خطاعلت محتملراه حل
Authentication failedنام کاربری/کلید اشتباه یا عدم تطابق کلید عمومیبررسی اطلاعات ورود، افزودن کلید عمومی به ~/.ssh/authorized_keys
Permission deniedمجوزهای نادرست بر روی فایل یا پوشه هدفتنظیم مجوزها با chmod/chown یا درخواست دسترسی از مدیر سرور
Connection timed outفایروال مسدود، پورت بسته یا مشکلات شبکهباز کردن پورت ۲۲، تست اتصال با telnet یا nc

نکته عملی: اگر نیاز به انتقال مکرر پوشه های بزرگ دارید، یک اسکریپت ساده Bash بنویسید که با ترکیب sftp -C -b batch.txt و گزینه -o "BatchMode yes"، کل عملیات را به صورت خودکار و فشرده اجرا کند. این کار نه تنها خطاهای انسانی را کاهش می دهد، بلکه بهره وری شبکه را به حداقل می رساند.

سوالات متداول

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

ابتدا یک کلاینت SFTP مانند WinSCP یا FileZilla نصب کنید. سپس آدرس سرور، نام کاربری و پورت (معمولاً 22) را وارد کنید. بر روی Connect کلیک کنید و پس از احراز هویت، می توانید فایل ها را انتقال دهید.

آیا SFTP و FTPS یک چیز هستند؟

خیر، این دو پروتکل متفاوتند. SFTP بر پایه SSH ساخته شده و تمام ارتباطات را در یک کانال رمزگذاری می کند. FTPS از SSL/TLS استفاده می کند و نیاز به چندین پورت باز دارد.

رمز عبور را در خط فرمان SFTP چگونه وارد کنم؟

وقتی دستور sftp user@host را اجرا می کنید، برنامه به طور خودکار از شما رمز عبور می خواهد. کافی است آن را وارد کنید و Enter بزنید. اگر می خواهید از کلیدهای SSH استفاده کنید، می توانید گزینه -i را به همراه مسیر کلید اضافه کنید.

آیا می توانم کلیدهای SSH را برای احراز هویت SFTP استفاده کنم؟

بله، استفاده از کلید عمومی/خصوصی امن تر از رمز عبور است. ابتدا یک جفت کلید با ssh-keygen تولید کنید. کلید عمومی را به فایل authorized_keys سرور اضافه کنید و در کلاینت مسیر کلید خصوصی را مشخص کنید.

چک لیست عملی

  • مفهوم SFTP و مزایای امنیتی آن را به خوبی درک کنید
  • سرور SFTP را با تنظیمات پایه راه اندازی کنید
  • حساب کاربری جدید بسازید و سطوح دسترسی را به دقت تنظیم کنید
  • از کلاینت های محبوب برای برقراری اتصال امن استفاده کنید
  • دستورات SFTP را برای انتقال فایل به کار ببرید و خروجی ها را بررسی کنید
  • خطاهای رایج را شناسایی و رفع کنید؛ عملکرد را بهینه سازی نمایید

امید است این راهنمای گام به‑گام بتواند شما را در استفاده مؤثر از SFTP یاری کند. اگر سؤال یا تجربه ای دارید، خوشحال می شویم در بخش نظرات بشنویم.

نوشته‌شده و بازبینی‌شده توسط

متخصص سئو، وردپرس و تولید محتوا

اولین نفری باش که نظر می‌ده!

فقط نام لازم است، ایمیل اختیاریه و منتشر نمی‌شه.