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

FTP یا “پروتکل انتقال پرونده” یک روش محبوب برای انتقال پروندهها بین سیستم شخصی و سرور است. SFTP که مخفف SSH File Transfer Protocol یا پروتکل امن انتقال فایل از طریق پورت SSH است؛ پروتکل جداگانهای است که با SSH بسته بندی شده است و یک اتصال امن برای شما فراهم میکند. با استفاده از این پروتکل امکان انتقال ایمن فایلها به سرور مجازی و برعکس فراهم میشود.
تقریبا در همهی موقعیتها SFTP به خود FTP ارجحیت دارد زیرا FTP یک پروتکل ناامن است که تنها در شبکههای داخلی و موارد محدود امنیت دارد. اما SFTP به طور پیش فرض از پروتکل SSH برای احراز هویت و برقراری ارتباط با همان روشهای تائید اعتبار امن SSH استفاده میکند که به همین دلیل امنیت بیشتری دارد.
چگونه با SFTP متصل شویم
اگرچه رمزهای عبور SSH به راحتی قابل تنظیم هستند اما توصیه میکنیم کلیدهای SSH را ایجاد کرده و کلید عمومی ( public key ) خود را به سیستمی که دسترسی به آن را نیاز دارید انتقال دهید. این کار باعث افزایش امنیت و دسترسی راحتتر شما خواهد شد. برای آموزش تنظیم کلیدهای SSH میتوانید به این لینک مراجعه کنید.
اگر میتوانید از طریق SSH به سرور مجازی خود متصل شوید، شما تمام پیشنیازهای SFTP را برای مدیریت و انتقال فایلها در اختیار دارید. برای اینکه اتصال SSH خود را تست کنید میتوانید از دستور زیر استفاده کنید:
ssh sammy@your_server_ip_or_remote_hostname
اگر این دستور به درستی عمل میکند با تایپ کردن exit
خارج شوید.
اکنون میتوانیم با استفاده از دستور زیر یک اتصال SSH برقرار کنیم و با استفاده از آن یک پروتکل SFTP را باز کنیم:
sftp sammy@your_server_ip_or_remote_hostname
sftp sammy@your_server_ip_or_remote_hostname
اگر از پورت سفارشی خودتان برای اتصال به SSH استفاده میکنید میتوانید SFTP را به صورت زیر باز کنید:
sftp -oPort=custom_port sammy@your_server_ip_or_remote_hostname
پورت مورد نظر را در دستور قرار میدهید و با استفاده از آن متصل خواهید شد.
دریافت کمک در SFTP
مفیدترین دستور برای یادگیری، دستور help
است. اینگونه به خلاصهای از راهنماها و کمکهای SFTP دسترسی پیدا میکنید:
Help
یا
?
اکنون لیستی از دستورات را به شما نمایش میدهد:
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
Remote working directory: /home/demouser
اکنون ما میتوانیم محتویات دایرکتوری که در آن هستیم را نیز با دستوری دیگر مشاهده کنیم:
ls
Summary.txt info.html temp.txt testDirectory
توجه داشته باشید که دستورات درون SFTP مانند دستورات پوسته معمولی نیستند و شما به اندازهی پوستهی معمولی به همه چیز دسترسی نخواهید داشت. اما برخی از پرچم (flag) ها را در اختیار خواهید داشت.
ls -la
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 “ مخفف Local بیاوریم. تمام دستوراتی که تا کنون معرفی شدهاند نیز به همین روش قابلیت محلی سازی دارند:
lpwd
Local working directory: /Users/demouser
محتوای دایرکتوری سیستم خود را مشاهده کنید:
lls
Desktop local.txt test.html
Documents analysis.rtf zebra.html
همچنین میتوانید دایرکتوری مورد نظر خود را وارد نمایید:
lcd Desktop
انتقال فایل بین سرور مجازی لینوکس و سیستم محلی با استفاده از SFTP
مسیریابی بین سیستم شخصی و سرور مجازی بدون برای انتقال فایل از محدودیتهایی برخوردار است. ما اکنون راههای مختلف انتقال فایل را مرور میکنیم:
انتقال فایل از سرور مجازی به سیستم شخصی
با دستور زیر میتوانید فایلها را از سرور مجازی روی سیستم شخصی خود بارگذاری کنید.
get remoteFile
Fetching /home/demouser/remoteFile to remoteFile
/home/demouser/remoteFile ۱۰۰% ۳۷KB ۳۶٫۸KB/s ۰۰:۰۱
همانطور که میبینید، به طور پیشفرض فرمان get
فایل مورد نظرتان را به همان نام از سرورتان روی سیستم شخصی شما دانلود میکند. اگر میخواهید فایلهای سرورتان را با نام متفاوتی ذخیره کنید باید دستور زیر را وارد کنید:
get remoteFile localFile
فرمان get
گزینههای مختلفی در اختیار شما قرار میدهد. برای مثال ما میتوانیم تمام محتواهای یک دایرکتوری را با مشخص کردن مرجع آن کپی کنیم:
get -r someDirectory
ما میتوانیم به SFTP بگوییم که دسترسی به یک دایرکتوری را در زمانهای مورد نیاز برای ما حفظ کند:
get -Pr someDirectory
انتقال فایل از کامپیوتر شخصی به سرور لینوکس از طریق SFTP
انتقال فایلها به سرور لینوکس به همان آسانی با استفاده از دستور put
انجام میشود:
put localFile
Uploading localFile to /home/demouser/localFile
localFile ۱۰۰% ۷۶۰۷ ۷٫۴KB/s ۰۰:۰۰
تمام پرچمهایی که با فرمان get
کار میکنند با فرمان put
نیز اعمال میشوند. بنابراین برای کپی کردن یک دایرکتوری از کامپیوتر شخصی روی سرورتان میتوانید دستور زیر را وارد کنید:
put -r localDirectory
توجه : در حال حاضر میان نسخههای OpenSSH با نسخههای فعلی اوبونتو مشکلاتی وجود دارد که هنگام اجرای دستور فوق شما را با خطا مواجه میکند. برای انتقال محتوا با اخطار Couldn't canonicalise: No such file or directory
. مواجه خواهید شد. برای حل این مشکل باید ابتدا با نوشتن mkdir localDirectory
دایرکتوری مقصد را در سرور خود بسازید.
یک راه دیگر که برای آپلود و دانلود فایلها مناسب است استفاده از دستور DF
است. با استفاده از این دستور میتوانید فضای کافی برای تکمیل نقل و انتقالات موردنظرتان را بررسی کنید:
df –h
Size Used Avail (root) %Capacity
۱۹٫۹GB ۱۰۱۶MB ۱۷٫۹GB ۱۸٫۹GB ۴%
توجه داشته باشید که هیچ گونه اعمال تغییری با دستورات فوق در سیستم شخصی وجود ندارد اما میتوانید از فرمان !
استفاده کنید. فرمان !
به ما اجازه ورود، دسترسی و تغییر در دیسک را میدهند.
!
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
تمام دستورات محلی نیز همینگونه کار خواهد کرد. برای برگشت exit
را تایپ کنید.
تغییر فایلهای ساده با SFTP
SFTPبه شما این امکان را میدهد که نوع یک فایل پرکاربرد را نیز عوض کنید. به عنوان مثال شما میتوانید مالک یک پرونده را تغییر دهید.
chown userID file
توجه کنید که برخلاف دستور chmod
در سیستم، فرمان SFTP نام کاربری روت را نمیپذیرد و باید به جای آن از UIDها استفاده کنید. متاسفانه درون رابط کاربری SFTP راهی برای دسترسی راحت به UIDها وجود ندارد. نتیجتا شما نیازمند زدن یک دستور در کنار آن هستید:
get /etc/passwd
!less passwd
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
...
مشاهده میکنید که چگونه به جای دادن فرمان !
به تنهایی، ما از آن به عنوان یک پیشوند برای تکمیل یک فرمان محلی استفاده کردیم. این کار برای اجرای هر دستوری در local سرور شما امکان پذیر است و میتوانست با دستور df
نیز استفاده شود.
اینگونه UID در ستون سوم پرونده قرار خواهد گرفت.
برای مثال میتوانیم مالک یک گروه پرونده را با دستور زیر تغییر دهیم:
chgrp groupID file
بازهم هیچ راه سادهای برای تهیه لیست گروههای پرونده موجود در سیستم به صورت ریموت وجود ندارد. پس باید از دستور زیر کمک بگیریم:
get /etc/group
!less group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
. . .
ستون سوم، ID گروهی که در ستون اول ذکر شده را نگه میدارد و این همان چیزی است که ما دنبال آن بودیم.
خوشبختانه اکنون فرمان chmod
به خوبی روی سرور مجازی لینوکس کار میکند:
chmod 777 publicFile
Changing mode on /home/demouser/publicFile
هیچ دستوری برای تغییر مجوزهای پروندههای محلی وجود ندارد اما شما میتوانید local umask
را به گونهای تنظیم کنید که تمام پروندههایی که در سیستم محلی کپی شدهاند دارای مجوز دسترسی شوند.
اینگونه از دستور lumask
استفاده میکنیم:
lumask 022
Local umask: 022
اکنون تمام پروندههای دانلود شده، تا زمانی که از پرچم “p” استفاده نشود دسترسیهای ۶۴۴ را دارند.
SFTP بهش ما این امکان را میدهد تا در سیستم لوکال خود یا سرور مجازیتان، دایرکتوریهایی ایجاد کنید. این کار با استفاده از دستورات mkdir
و lmkdir
انجام میگیرد. بقیهی دستورات مربوط به پروندهی دایرکتوری مانند ln
, rm
, rmdir
و.. فقط در سرور ریموت قابل انجام هستند.
از آنجایی که این دستورات تنها در فضای شل لینوکس عمل میکنند اگر لازیم دارید که آنها را در سیستم لوکال خود اجرا کنید باید توجه داشته باشید که باید از فرمان !
استفاده کنید تا به شل بروید. یا از آن به عنوان یک پیشوند استفاده کنید تا دستورات را در سیستم لوکال خود اجرا کنید:
!chmod 644 somefile
exit
یا bye
برای خروج استفاده نمایید.
تمام
اگرچه SFTP ابزاری ساده است ، اما برای مدیریت سرورها و انتقال فایلها بین آنها بسیار مفید است. به عنوان مثال ، می توانید از SFTP استفاده کنید تا کاربران خاص بدون دسترسی روت به SSH بتوانند فایل ها را انتقال دهند.
امیدواریم که آموزش انتقال فایل در سرور مجازی لینوکس و استفاده ار پروتکل SFTP برای شما مفید بوده باشد. در صورت نیاز به هرگونه راهنمایی بیشتر یا برخورد با هرگونه مشکلی در مسیر این آموزش، میتوانید از تیم پشتیبانی آنلاین سرور کمک بگیرید.
ارسال نظر