تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

آموزش استفاده از SFTP برای انتقال ایمن فایل‌ها با سرور راه‌ دور


۲۶ اسفند ۱۴۰۳

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

FTP یا پروتکل انتقال فایل یکی از روش‌های قدیمی و غیرامن برای انتقال فایل‌ها بین دو سرور از راه دور است که به دلیل عدم رمزگذاری اطلاعات، ممکن است باعث ایجاد مشکلات امنیتی شود.

در مقابل همان‌طور که گفته شد، SFTP که مخفف SSH File Transfer Protocol یک پروتکل قدرتمند و ایمن برای انتقال فایل‌ها می‌باشد. SFTP از همان پروتکل SSH برای ایجاد یک اتصال امن استفاده می‌کند، که این اتصال ایمن موجب می‌شود فایل‌ها بدون نگرانی از حملات امنیتی منتقل شوند. این روش به شما امکان می‌دهد فایل‌ها را به‌صورت امن و بدون وابستگی به سرورهای محلی و راه دور منتقل کنید. در مقایسه با SFTP، FTP به‌دلیل ویژگی‌های امنیتی پیشرفته و قابلیت عملکرد تحت پروتکل SSH، انتخابی امن‌تر است و برای انتقال فایل‌ها در شبکه‌های عمومی یا حساس توصیه می‌شود. در حالی که FTP به دلیل عدم رمزگذاری، برای استفاده در شبکه‌های ناامن مناسب نیست و باید تنها در شرایط خاص و در شبکه‌های مورد اعتماد استفاده گردد.

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

در ادامه بخوانید:

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

نحوه ایجاد اتصال SFTP

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

اگرچه به راحتی می‌توانید از نام کاربری و رمز عبور برای اتصال استفاده کند، اما توصیه می‌شود که از کلید عمومی برای احراز هویت SSH استفاده کنید. این روش نه تنها امنیت بالایی دارد، بلکه در طولانی‌مدت می‌تواند در زمان شما صرفه‌جویی کند.

برای شروع استفاده از SSH با کلید عمومی، ابتدا باید کلید عمومی خود را روی سرور مقصد انتقال دهید. در مرحله بعد، بدون نیاز به وارد کردن نام کاربری و رمز عبور از طریق SSH به سرور وصل شوید. برای بررسی دسترسی SSH، می‌توانید از دستور زیر استفاده کنید.

ssh sammy@your_server_ip_or_remote_hostname

بعد از برقراری اتصال می‌توانیم با دستور زیر اتصال را قطع کنیم:

exit

حالا نوبت برقراری اتصال SFTP با استفاده از دستور زیر می‌باشد:

sftp sammy@your_server_ip_or_remote_hostname

با اجرای دستور بالا، به سرور راه دور متصل و یک پیام SFTP نمایش داده خواهد شد.

در صورتی که از پورتی غیر از 22 برای SSH استفاده کرده‌اید، برای اتصال SFTP از دستور زیر استفاده کنید:

sftp -oPort=custom_port sammy@your_server_ip_or_remote_hostname

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


شاید به دنبال این مطلب باشید: نحوه تنظیم کلیدهای SSH در سرور مجازی اوبونتو Ubuntu

درخواست راهنما در SFTP

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

help
Or
?

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

Output
Available commands:
bye                                Quit sftp
cd path                            Change remote directory to 'path'
chgrp grp path                     Change group of file 'path' to 'grp'
chmod mode path                    Change permissions of file 'path' to 'mode'
chown own path                     Change owner of file 'path' to 'own'
df [-hi] [path]                    Display statistics for current directory or
                                   filesystem containing 'path'
exit                               Quit sftp
get [-Ppr] remote [local]          Download file
help                               Display this help text
lcd path                           Change local directory to 'path'
. . .

پیمایش فایل سرور مقصد با استفاده از SFTP

در این بخش می‌توانید با دستورات فایل، سرور از راه دور را پیمایش کنید.

pwd

خروجی دستور pwd، مسیر دایرکتوری فعلی که در آن هستید را نمایش می‌دهد.

Remote working directory: /home/demouser

در ادامه می‌توانید با دستور ls محتوای دایرکتوری فعلی سرور راه دور را مشاهده کنید:

ls
Output
Summary.txt     info.html       temp.txt        testDirectory

نکته مهم اینکه دستورات موجود در SFTP، دستورات shell معمول نیستند و از نظر ویژگی به آن اندازه غنی نمی‌باشند، اما برخی از مهمترین flagهای مورد نیاز در آن پیاده‌سازی شده است.

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

ls -la
Output
drwxr-xr-x    5 demouser   demouser       4096 Aug 13 15:11 .
drwxr-xr-x    3 root     root         4096 Aug 13 15:02 ..
-rw-------    1 demouser   demouser          5 Aug 13 15:04 .bash_history
-rw-r--r--    1 demouser   demouser        220 Aug 13 15:02 .bash_logout
-rw-r--r--    1 demouser   demouser       3486 Aug 13 15:02 .bashrc
drwx------    2 demouser   demouser       4096 Aug 13 15:04 .cache
-rw-r--r--    1 demouser   demouser        675 Aug 13 15:02 .profile
. . .

برای رفتن به دایرکتوری دیگر از این دستور استفاده کنید:

cd testDirectory

اکنون با دستورات بالا توانستید فایل سرور راه دور را پیمایش کنید. سوال، اگر به فایل سرور محلی سرور خودمان نیاز داشته باشیم باید چه کنیم؟ جواب، می‌توانید دستورات مستقیم را با اضافه کردن حرف l به اول آن‌ها به سرور محلی خود هدایت کنیم.

همه دستوراتی که تاکنون بحث شده دارای معادل‌های محلی نیز می‌باشند. برای مثال می‌توانیم با دستور زیر دایرکتوری محلی سرور خودمان را پرینت کنیم.

lpwd
Output
Local working directory: /Users/demouser

همینطور با دستور زیر، می‌توانید محتوای دایرکتوری فعلی را روی سرور محلی لیست کنید:

lls
Output
Desktop			local.txt		test.html
Documents		analysis.rtf		zebra.html

نکته آخر از این بخش این‌است که می‌توانید دایرکتوری مورد نظر خود را برای تعامل در سرور محلی با دستور زیر تغییر دهید.

lcd Desktop

انتقال فایل‌‌ها با استفاده از SFTP

پیمایش در فایل سرورهای راه دور و محلی، بدون اینکه بتوانید فایل‌ها را بین آن‌ها انتقال دهید، قابلیت محدودی در اختیار شما قرار می‌دهد.

انتقال فایل‌ها از سرور راه دور به سرور محلی

برای دانلود فایل‌ها از سرور راه دور، می‌توانید از دستور get استفاده کنید.

get remoteFile
Output
Fetching /home/demouser/remoteFile to remoteFile
/home/demouser/remoteFile                       100%   37KB  36.8KB/s   00:01

همان‌طور که مشاهده می‌کنید، به‌طور پیش‌فرض دستور get یک فایل از سرور راه دور را با همان نام روی سرور محلی دانلود می‌کند.

حالا، برای کپی کردن فایل از سرور راه دور با نام متفاوت، کافی است نام جدید را پس از دستور get مشخص کنید. به این صورت:

get remoteFile localFile

دستور get از برخی گزینه‌ها و فلگ‌ها پشتیبانی می‌کند، به عنوان مثال می‌توانید یک دایرکتوری و تمام محتوای آن را با استفاده از گزینه‌ی -r (گزینه‌ی بازگشتی) کپی کنید:

get -r someDirectory

در اینجا می‌توانید با دستور زیر به SFTP بگویید با استفاده از فلگ -P یا -p، مجوزها و زمان‌های دسترسی مناسب را بدون تغییر از مبدا به مقصد منتقل کند.

get -Pr someDirectory

انتقال فایل‌های محلی به سرور راه دور

انتقال فایل‌ها به سرور راه دور نیز به همین صورت است، با این تفاوت که از دستور put استفاده می‌کنید:

مرحله اول:

put localFile
Output
Uploading localFile to /home/demouser/localFile
localFile                                     100% 7607     7.4KB/s   00:00

در این نوع انتقال هم، همان فلگ‌هایی که برای دستور get کار می‌کنند، برای put هم قابل استفاده هستند. بنابراین، برای کپی کردن یک دایرکتوری محلی کامل، می‌توانید مانند زیر از دستور put -r استفاده کنید:

put -r localDirectory

یکی از ابزارهای آشنا که هنگام دانلود و آپلود فایل‌ها مفید است، دستور df است که مشابه نسخه خط فرمان عمل می‌کند. با استفاده از این دستور می‌توانید بررسی کنید که فضای کافی برای انجام انتقالات مورد نظر دارید یا نه:

df -h
Output
    Size     Used    Avail   (root)    %Capacity
  19.9GB   1016MB   17.9GB   18.9GB           4%

لطفاً توجه داشته باشید که نسخه محلی این دستور وجود ندارد، اما می‌توانیم با استفاده از دستور ! این محدودیت را دور بزنیم.

دستور! شما را به sell محلی می‌برد، جایی که می‌توانید هر دستوری که در سرور محلی‌مان در دسترس است را اجرا کنید. برای بررسی استفاده از دیسک، می‌توانید دستور زیر را وارد کنید:

!

و سپس:

df -h

خروجی نمونه:

Filesystem      Size   Used  Avail Capacity  Mounted on
/dev/disk0s2   595Gi   52Gi  544Gi     9%    /
devfs          181Ki  181Ki    0Bi   100%    /dev
map -hosts       0Bi    0Bi    0Bi   100%    /net
map auto_home    0Bi    0Bi    0Bi   100%    /home

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

exit

پیشنهاد مطالعه: FTP چیست؟ کاربرد ها، مزایا و معایب پروتکل FTP

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

SFTP به شما امکان انجام برخی عملیات مدیریت فایل را می‌دهد. برای مثال، می‌توانید مالکیت یک فایل را در سرور راه دور تغییر دهید با استفاده از:

chown userID file

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

به‌عنوان یک راه‌حل جایگزین، می‌توانید فایل /etc/passwd را بخوانید، زیرا در بیشتر توزیع‌های لینوکس نام کاربری را به UID مرتبط می‌کند:

get /etc/passwd
!less passwd
Output
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
. . .

دقت کنید که به جای اجرای دستور ! به‌تنهایی، از آن به‌عنوان پیشوند یک دستور محلی استفاده کرده‌ایم. این روش به ما امکان می‌دهد هر دستوری را که در سرور محلی در دسترس است اجرا کنیم، همان‌طور که قبلاً برای دستور df استفاده شد.

در فایل /etc/passwd، مقدار UID در ستون سوم قرار دارد و با کاراکترهای دونقطه (:) از هم جدا شده است.

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

chgrp groupID file

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

get /etc/group
!less group
Output
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
. . .

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

دستور chmod در محیط SFTP به‌طور معمول برای تغییر مجوزهای فایل در سرور فایل راه دور عمل می‌کند:

chmod 777 publicFile

خروجی:

Changing mode on /home/demouser/publicFile

متاسفانه، هیچ دستوری معادل برای تغییر مجوزهای فایل در سرور محلی در محیط SFTP وجود ندارد، اما می‌توان مقدار umask را تنظیم کرد تا فایل‌هایی که به سرور محلی کپی می‌شوند، مجوزهای مناسب داشته باشند.

برای این کار می‌توانید از دستور lumask استفاده کنید:

lumask 022
Output
Local umask: 022

بعد از اجرای دستورات بالا، همه فایل‌های دانلود شده (تا زمانی که از فلگ p- استفاده نشود)، دارای مجوز 644 خواهند بود.

ایجاد دایرکتوری

SFTP همچنین به شما اجازه استفاده از دو دستور lmkdir و mkdir را به ترتیب روی هر دو سرور محلی و راه دور برای ایجاد دایرکتوری می‌دهد.

بقیه دستورات مربوط به مدیریت فایل‌ها فقط بر روی سرور راه دور را مانند زیر اجرا کنید:

ln
rm
rmdir

این دستورات عملکرد اصلی معادل‌های خود در shell را شبیه‌سازی می‌کنند. اگر نیاز به انجام این عملیات روی سرور فایل محلی دارید، می‌توانید با اجرای دستور زیر به یک شل محلی وارد شوید:

!

یا می‌توانید یک دستور را مستقیماً روی سرور محلی اجرا کنید، کافی است قبل از آن از علامت ! استفاده کنید، مانند:

!chmod 644 somefile

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

جمع بندی

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

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

1- چگونه ازطریق SFTP چند فایل را به‌طور همزمان آپلود یا دانلود کنم؟

برای آپلود یا دانلود چند فایل به‌طور همزمان از طریق SFTP، می‌توان از ابزارهایی مانند lftp و parallel استفاده کرد که امکان انتقال همزمان چندین فایل را فراهم می‌کنند. علاوه بر این، اسکریپت‌های Bash نیز می‌توانند برای انجام این عملیات نوشته شوند. همچنین، نرم‌افزارهای گرافیکی مانند FileZilla و WinSCP قابلیت انتقال همزمان فایل‌ها را دارند و می‌توانند به‌راحتی برای مدیریت فایل‌ها و اتصال به سرورهای SFTP استفاده شوند.

2- چگونه ازطریق SFTP به هاست وصل شوم؟

برای اتصال به هاست از طریق SFTP، کافیست دستور sftp username@hostname را در ترمینال وارد کنید، جایی که username نام کاربری و hostname آدرس آی‌پی یا دامنه هاست شماست. پس از وارد کردن این دستور و رمز عبور، به هاست متصل می‌شوید و می‌توانید با استفاده از دستورات SFTP مانند get برای دانلود و put برای آپلود فایل‌ها، مدیریت فایل‌های خود را انجام دهید.