آموزش استفاده از 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 از پروتکل 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
برای آپلود فایلها، مدیریت فایلهای خود را انجام دهید.