ماهو 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.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.