دسته بندی:

استفاده از 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

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

تمام

اگرچه SFTP ابزاری ساده است ، اما برای مدیریت سرورها و انتقال فایلها بین آنها بسیار مفید است. به عنوان مثال ، می توانید از SFTP استفاده کنید تا کاربران خاص بدون دسترسی روت به SSH بتوانند فایل ها را انتقال دهند.

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

ارسال نظر

سه × یک =