كيف تستخدِم SFTP لنقل الملفّات بأمان إلى خادوم بعيد


محمد أحمد العيل

ماهو SFTP؟

بروتوكول نقل الملفّات File Transfer Protocol المعروف اختصارًا بـFTP هو طريقة شائعة لنقل الملفّات بين نظامَيْن متباعدَيْن.
أمّا بروتوكول النّقل الآمن للملفّات SFTP (اختصار لـSecure File Transfer Protocol أو SSH File Transfer Protocol) فهو بروتوكول منفصِل يأتي مُحزّمًا ب SSH ويعمل بطريقة مشابهة لFTP ولكن عبر اتّصال مُؤمَّن. ميزة SFTP هي إمكانيّة الاستعانة باتّصال مُؤمَّن للتّنقل في نظامَي الملفّات، المحلّي والبعيد؛ زيادةً على إمكانيّة نقل الملفّات بين النّظامين.

يُفضَّل غالبًا استخدامُ SFTP بدلًا من FTP نظرا لميزات الأمان المُضْمَرَة وقابليّة الاعتماد على اتّصال SSH. بروتوكول FTP غير آمن ويجدُر ألّا يُستخدم إلّا في حالات محدودة ضمن شبكات موثوقة.تُتيح عدّة أدوات SFTP عبر واجهة رسوميّة، إلّا أنّنا في هذا الدّليل سنعتمد على سطر الأوامر.

كيف يُستخدَم SFTP للاتّصال؟

يَستعمل SFTP افتراضيًّا بروتوكول َ SSH للاستيثاق Authentication وبدء اتّصال آمن. تتوفّر لهذا السّبب نفس طرق SSH للاستيثاق في SFTP.
ننصح باستخدام مفاتيح SSH بدلًا من كلمات السّرّ، على الرغم من سهولة استخدام هذه الأخيرة. أنشئ مفاتيح SSH وانقُل المفتاح العموميّ إلى النّظام الّذي تُريد الولوج إليه. هذه الطّريقة آمَن وأكثر اقتصادًا، على الأمد البعيد، في الوقت اللّازم للولوج. إن لم تكُن أعددتَ خادومك لاستخدام مفاتيح SSH فهذا الدّليل يشرح لك كيفيّة ذلك.

تعني قدرتك على الاتّصال بخادومك عن طريق SSH أنّ لديك كامل المتطلَّبات لاستخدام SFTP في إدارة الملفّات. نفِّذ الأمر التّالي لاختبار الولوج بSSH:

ssh username@remote_hostname_or_IP

نفّذ أمر الخروج بعد نجاح الولوج بSSH:

exit

الأمر التّالي يبدأ اتّصالَ SSH، ثم يفتح جلسة Session من SFTP عن طريق هذا الاتّصال:

sftp username@remote_hostname_or_IP

ستتّصل بالخادوم البعيد وسيتحوّل سطرُ الأوامر إلى سطر أوامر SFTP.

الحصول على المساعدة في SFTP

أفضل وسيلة لمعرفة كيف يعمل SFTP هي استخدام أمر help الّذي يُعطي ملخَّصًا من توثيق المُساعدة في SFTP.
يُمكن استخدامُ أي من الطّريقتَيْن التّاليتَيْن للحصول على المساعدة:

help

أو

?

ستظهر في النّتيجة جميع أوامر SFTP المُتاحة:

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

يُتيح SFTP أوامر للتّنقّل بين ملفّات النّظام البعيد. هذه الأوامر مُشابهة لأوامر Shell الّتي تؤدّي نفس الغرض.

نُريد أوّلًا معرفةَ أين نوجَد ضمن نظام ملفّات الخادوم. نُنفّذ الأمر التّالي، مثل ما كنّا سنفعل لو أنّنا في جلسة Shell اعتيّاديّة:

pwd

النّتيجة هيّ:

Remote working directory: /home/demouser

يُمكن عرض محتوى المُجلّد عبر أمر اعتيّاديّ آخر هوّ:

ls

النّتيجة:

Summary.txt info.html temp.txt testDirectory

يُرجى ملاحظة أنّ أوامر SFTP ليست أوامر Shell الاعتيّاديّة رغمَ الشّبه بينهما، كما أنّها ليست بنفس الغِنى الوظيفي؛ إلّا أنّها تُتيح بعض الخيّارات الهامّة:

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:

cd testDirectory

رأينا كيف يُمكننا التّنقّل في ملفّات الخادوم البعيد، ولكن ماذا إن أردنا الوصول إلى الملفّات الموجودة على الجهاز المحلّي؟
يُمكننا توجيه الأوامر إلى نظام الملفّات المحلّي عن طريق كتابة حرف l أمامها (l لـ local).

توجد أوامر محليّة مكافئة للأوامر الّتي عرضناها سابقًا:

lpwd

النّتيجة

Local working directory: /Users/demouser

ولعرض محتوى المجلّد الحالي على النّظام المحلّي:

lls

النّتيجة:

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

يُمكن أيضًا تغيير المجلّد الّذي نُريد التّعامل معه على الجهاز المحلّي:

lcd Desktop

نقل الملفّات باستخدام SFTP

لن يكون للتّنقّل في نظامَي ملفّات الخادوم البعيد والجهاز المحلّي كثيرُ فائدة إن لم نستطِع نقل الملفّات بين الاثنيْن.

1- نقل ملفّات من الخادوم إلى الجهاز المحلّي

نُنفّذ الأمر التّالي لتنزيل ملفّ من نظام الملفّات البعيد (حيثُ remoteFile اسم الملفّ):

get remoteFile

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

يبحث الأمر عن ملفّ باسم remoteFile في مجلّد العمل على الخادوم ثمّ يُنزّله إلى الجهاز المحلّي ويضعه في مجلّد العمل مع المُحافظة على الاسم.

إن أردنا تغيير اسم الملفّ بعد تنزيله فيمكننا تعيين الاسم الجديد عبر ذكره بعد اسم الملف المُراد نقله (localFile في حالتنا):

get remoteFile localFile

توجد خيّارات تعمل مع أمر get. يُمكن على سبيل المثال، نقلُ مجلَّد وكلّ محتوياتِه عبر تحديد خيّار التّكرار كما يلي:get -r someDirectoryللحفاظ على أذونات الملفّ وتاريخ الوصول إليه نستخدم الخيّار P- أو p-:

get -Pr someDirectory

2- نقل ملفّات من الجهاز المحلّي إلى الخادوم

من السّهل نقلُ ملفّات إلى الخادوم، وذلك عن طريق أمر put المُشابه في طريقة عمله لأمر get الّذي تحدّثنا عنه في الفقرة السّابقة:

put localFile

النّتيجة:

Uploading localFile to /home/demouser/localFile
localFile                                     100% 7607     7.4KB/s   00:00
لنقل مجلّد وكلّ محتوياتِه ننفّذ الأمر (نفس خيّارات get تعمل مع put):
put -r localDirectory

أداة df من الأوامر المُفيدة أثناء تنزيل Download وتحميل Upload الملفّات. تُشبه في آليّة عملها أمر df الموجود ضمن أوامر Shell، حيثُ تسمح بالتّحقّق من أنّ لديك مساحة كافيّة في القرص الصّلب قبل نقل الملفّات:

df -h

مثال على نتيجة تنفيذ الأمر:

Size     Used    Avail   (root)    %Capacity
19.9GB   1016MB   17.9GB   18.9GB           4%

يُرجى ملاحظة أنّه لا توجد نسخة محليّة من هذا الأمر، لكن يُمكننا تجاوز هذا القُصور عن طريق استخدام الأمر !.
يفتح أمر ! جلسة محليّة يُمكننا تنفيذ أي أمر Shell مُتوفّر على النّظام المحلّي داخلَها. لمعرفة مساحة القرص الصّلب المُتاحة نستخدم أمر df.

!
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 نُنفّذ الأمر:
exit

يجب أن يظهر لديك الآن سطرُ أوامر SFTP.

التّعديل على خصائص الملفّات في SFTP

يسمح SFTP بإجراء العمليّات الأساسيّة لصيّانة الملفّات. هذه العمليّات مُفيدة جدًّا عند العمل على بُنية نظام الملفّات. يُمكنك على سبيل المثال، تغييرُ مالك ملفّ موجود على النّظام البعيد كما يلي:

chown userID file

لاحظ أنّ أمر chown في SFTP لا يقبل أسماء مستخدمين على عكس أمر chown في Shell؛ ولكنّه يطلُب بدلًا من ذلك معرّفات المُستخدمين، UIDs.
للأسف لاتوجد طريقة سهلة لمعرفة معرّف المستخدم من سطر أوامر SFTP.
الطّريقة التّالية تُفيد في تجاوز هذا القصور:

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
...

لاحِظ أنّنا أضفنا الأمر ! أمام أمر من النّظام المحلّي، بدلًا من تنفيذ أمر ! ثم الأمر المحلّي منفصلًا. يصلُح هذا الاختصار لكلّ الأوامر الموجودة في النّظام المحلّي وكان بإمكاننا استخدامُه مع أمر df في الفقرة السّابقة.
توجد معرّفات المستخدِمين في العمود الثّالث من ملف /etc/passwd حيثُ يُفصَل بين عموديْن بعلامة :.
بنفس الطّريقة يُمكننا تغيير المجموعة المالكة للملفّ:

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:
. . .
نبحث عن معرّف المجموعة groupID. في العمود الثّالث يوجد معرّف المجموعة الّتي يوجد اسمُها في العمود الأوّل.

بالنّسبة لأمر chmod في SFTP فيعمَل بنفس طريقة عمله على Shell.

chmod 777 publicFile
Changing mode on /home/demouser/publicFile

لا يوجد أمر في SFTP للتّحكّم في أذونات الملفّات على النّظام محلّي، لكن يُمكنك استخدام أمر umask محلّيًّا بحيثُ تحصُل الملفّات المنقولة إلى الخادوم على الأذونات المُناسبة.

طريقة الاستخدام هيّ:

lumask 022
Local umask: 022

ستحصُل جميع الملفّات المُنزَّلة من الخادوم الآن على أذونات 644، ما لم يُستخدَم خيّار P-.

تتوفّر في SFTP أيضًا إمكانيّة إنشاء مُجلّدات على كلّ من النّظاميْن المحلّي والبعيد؛ يُؤدّي أمرا lmkdir و mkdir على التّوالي هاتيْن المهمَّتيْن. يعمل الأمران بنفس طريقة عمل mkdir على Shell.
تعمل بقيّة الأوامر على نظام ملفّات الخادوم فقط:

ln
rm
rmdir
تعمل هذه الأوامر بنفس كيفيّة عمل أوامر Shell الّتي تحمل نفس الاسم. إذا أردتَ تنفيذ هذه الأوامر على نظام الملفّات المحلّي فتذكّر أنّه بإمكانك الانتقال إلى جلسة Shell عن طريق أمر !.

يُمكنك كذلك تنفيذ أمر واحد على النّظام المحلّي عبر وضع علامة ! أمامه، على سبيل المثال:

!chmod 644 somefile

استخدم أحد الأمريْن exit أو bye لإنهاء جلسة SFTP.

bye

خاتمة

SFTP مُفيدٌ جدًّا لكلّ مَن يُريد إدارة الخواديم ونقل الملفّات بينها. إن كنت تستخدم FTP أو SCP لنقل الملفّات فإنّ SFTP يُمثِّل أداةً يُمكنها الجمع بين نقاط القوّة في الاثنيْن.
على الرّغم من أنّ SFTP لا يُناسب كلّ حالات الاستخدام إلّا أنّ مرونتَه تجعل منه أداةً يجب أن تتوفّر لدى كل مدير أنظمة.

ترجمة - بتصرّف - لمقال How To Use SFTP to Securely Transfer Files with a Remote Server.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن