Linux Kung Fu: إدارة ملفات مريحة عبر SSH

إذا كان لديك أكثر من جهاز كمبيوتر يعمل بنظام Linux ، فمن المحتمل أنك تستخدمه طوال الوقت ssh. إنها أداة رائعة ، لكنني وجدت دائمًا شيئًا واحدًا غريبًا عنها. على الرغم من حقيقة أن اتصالات ssh تسمح بنقل الملفات باستخدام ، scpولا sftpيمكننا نقل الملفات بين الأنظمة المحلية والبعيدة دون تشغيل برنامج على المضيف المحلي ، أو دون الاتصال بالجهاز المحلي من جهاز التحكم عن بُعد.







هذا الأخير يمثل مشكلة حقيقية ، نظرًا لأن الخوادم غالبًا ما تكون متصلة أثناء وجودها خلف جدار حماية أو خلف جهاز توجيه NAT ، أي بدون عنوان IP دائم. نتيجة لذلك ، لن يتمكن الخادم ، على أي حال ، من الاتصال بالنظام المحلي الذي تم الوصول إليه مسبقًا منه. إذا كان بإمكانك في جلسة ssh أخذ ملف محلي أو بعيد ونقله إلى المكان الذي تريده ، فسيكون ذلك مناسبًا للغاية.



في الواقع ، لم أحقق هذا الهدف تمامًا ، لكنني اقتربت جدًا من تحقيقه. سأخبرك في هذه المقالة عن برنامج نصي يسمح لك بتحميل أدلة بعيدة على جهاز الكمبيوتر المحلي الخاص بك. على الجهاز المحلي ، ستحتاج إلى التثبيتsshfs، ولكن في مكان بعيد حيث قد لا تتمكن من تثبيت البرامج ، لن تضطر إلى تغيير أي شيء. إذا كنت تقضي بعض الوقت في إعداد الأنظمة ، وإذا كان هناك خادم ssh يعمل على الكمبيوتر العميل ، فيمكنك أيضًا تحميل الدلائل المحلية على الأنظمة البعيدة. لا داعي للقلق بشأن حظر عناوين IP أو المنافذ. في الواقع ، إذا كنت قادرًا على الاتصال بجهاز بعيد ، فهذا يعني أنك ستنجح فيما أريد أن أخبرك عنه.



نتيجة لذلك ، إذا تم الجمع بين كل هذا ، فقد اتضح أنني قريب جدًا من الهدف. يمكنني العمل مع shell command على العميل أو على الخادم ولدي القدرة على قراءة الملفات وكتابتها بسهولة على جانبي الاتصال. للقيام بذلك ، تحتاج فقط إلى تكوين كل شيء بشكل صحيح.



هل هناك مشكلة هنا؟



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



بالإضافة إلى ذلك ، يتم تسهيل العمل بشكل كبير من خلال النص الذي سأتحدث عنه. إنه يخفي التفاصيل عن المستخدم ، لذلك يبدو إجراء الاتصال (تقريبًا) كالمعتاد ، وبعد ذلك يعمل كل شيء كما ينبغي.



بضع كلمات عن sshfs



sshfsتتيح لك الأداة العمل مع نظام الملفات في مساحة المستخدمين (نظام الملفات في مساحة المستخدمين ، FUSE). أي أننا نتحدث عن حقيقة أن هناك طبقة في مساحة المستخدم توجد أعلى نظام الملفات الأساسي. في هذه الحالة ، يكون نظام الملفات هذا هو خادم ssh الذي يدعم ملفات sftp. يتيح لك هذا العمل مع الملفات الموجودة على نظام بعيد ، والتعامل معها كما لو كانت موجودة في نظام ملفات حقيقي على الكمبيوتر المحلي. إذا لم تكن قد جربته بعد sshfs، فجربه. هذه الأداة تعمل بشكل جيد جدا.



لنفترض أنك قمت بتسجيل الدخول إلى جهاز الكمبيوتر الخاص بك myserverوقمت بتشغيل الأمر التالي من جهازك المحلي: 



sshfs myserver:/home/admin ~/mounts/myserver


سيؤدي ذلك إلى جعل دليل الكمبيوتر البعيد /home/adminيمكن الوصول إليه على النظام المحلي على طول المسار ~/mounts/myserver.



عند sshfsالاستخدام ، يمكنك استخدام خيارات متنوعة. على سبيل المثال ، يمكنك الترتيب لإعادة الاتصال بعد فقد الاتصال. لمزيد من التفاصيل ، sshfsانظر المساعدة.



نظرًا لأنه sshfsيستخدم إصدارًا تم تحميله عن بُعد من الملف ، يتم حفظ جميع التغييرات التي تم إجراؤها على الملف على الجهاز البعيد. وبعد إغلاق اتصال sshfs ، لا يبقى شيء على الكمبيوتر المحلي. سوف نصلح هذا الآن.



التحضير الأولي



قبل أن أنتقل إلى وصف البرنامج النصي ، الذي تم ذكره أعلاه ، أريد أن أتحدث عن بعض إعدادات العميل التي ، إذا أردت ، يمكنك تعديلها بنفسك. لذلك ، أقوم هنا بإنشاء دليل ~/remote، وفيه أقوم بإنشاء أدلة فرعية لكل كمبيوتر بعيد. على سبيل المثال - يمكن أن تكون الدلائل ~/remote/fileserverو ~/remote/lab.



البرنامج النصي يسمى sshmount. يأخذ نفس الحجج مثل ssh. لتبسيط العمل مع البرنامج النصي ، يجب تخزين المعلومات حول المضيف البعيد في ملف ~/.ssh/config، مما يسمح باستخدام أسماء مضيف بسيطة وقصيرة. على سبيل المثال ، labقد تبدو معلومات الكمبيوتر كما يلي:



Host lab
Hostname lab.wd5gnr-dyn.net
Port 444
User alw
ForwardX11 yes
ForwardX11Trusted yes
TCPKeepAlive yes
Compression yes
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p


هذا ليس ضروريًا حقًا ، ولكن مع هذا الأسلوب لديك دليل رائع المظهر تحت تصرفك ~/remote/lab، وليس بنية عرض معقدة ~/remote/alw@lab.wd5gnr-dyn.net:444. لا يوجد شيء غامض حول كل هذه المعايير. الشيء الوحيد الذي أريد أن ألفت انتباهكم إلى أن ControlMasterو ControlPathتسمح لك لتنظيم لتشغيل أسرع مع المركبات التي، في هذه الحالة، من المهم جدا.



بالإضافة إلى ذلك ، يمكنك تنظيم اتصال تلقائي بنظام بعيد باستخدام مفاتيح ssh الخاصة. إليك الأشياء المتعلقة بها.



النصي



يمكن استخدام البرنامج النصي الخاص بنا بطريقتين. لذلك ، إذا تم استدعاؤه عبر رابط إلى sshunmount، فسيتم إلغاء تحميل نظام الملفات المرتبط بالمضيف البعيد المحدد. إذا تم استدعاءه بشكل مختلف (عادةً كيف sshmount) ، فإنه يؤدي الإجراءات الثلاثة التالية:



  1. يتحقق مما إذا كان الدليل يحتوي على ~/remoteدليل فرعي بنفس الاسم مثل اسم المضيف (على سبيل المثال - lab). إذا لم يكن هناك مثل هذا الدليل ، فإنه يعرض رسالة خطأ ويستمر في العمل.
  2. في حالة وجود مثل هذا الدليل ، يبحث البرنامج النصي في قائمة أنظمة الملفات المحملة في حالة تثبيت نظام الملفات المطلوب بالفعل. إذا كان الأمر كذلك ، فهو يواصل العمل.
  3. إذا لم يتم تحميل الدليل ، فإنه يتصل sshfsويستمر.


يمكن العثور على هذا البرنامج النصي على GitHub . وها هو الكود الذي أزيلت منه بعض التعليقات:



#!/bin/bash
 
if [ "$1" == "" ]
then
echo Usage: sshmount host [ssh_options] - Mount remote home folder on ~/remote/host and log in
echo or: sshunmount host - Remove mount from ~/remote/host
exit 1
fi
 
#    sshunmount...
if [ $(basename "$0") == sshunmount ]
then
echo Unmounting... 1>&2
fusermount -u "$HOME/remote/$1"
exit $?
fi
 
#  ...
if [ -d "$HOME/remote/$1" ] #   ?
then
if mount | grep "$HOME/remote/$1 " #    ?
then
echo Already mounted 1>&2
else
sshfs -o reconnect $1: $HOME/remote/$1 # mount
fi
else
echo No remote directory ~/remote/$1 exists 1>&2
fi
ssh $@ #  


هذا السيناريو يعطيني نصف ما أحتاجه. وهي تسمح لك بالعمل بشكل ملائم مع الملفات البعيدة على الكمبيوتر المحلي الذي أتصل به. لكن جعله بحيث يكون من الممكن العمل مع الملفات الموجودة على الجهاز المحلي من جهاز كمبيوتر بعيد هو أمر أكثر صعوبة.



حل المسألة العكسية



إذا كنت ترغب في تجربة تثبيت المجلدات على جهازك المحلي على خادم ، فستحتاج إلى تشغيل خادم ssh على الجهاز المحلي. بالطبع ، إذا كان جهاز الكمبيوتر المحلي الخاص بك مرئيًا ويمكن الوصول إليه من الخادم ، فهذا أمر بسيط: ما عليك سوى تشغيله على الكمبيوتر البعيد sshfsوتثبيت المجلد عليه من الكمبيوتر المحلي. ولكن في كثير من الحالات ، لا يمكننا الوصول إلى النظام المحلي ، والذي قد يكون موجودًا خلف جدران الحماية أو أجهزة التوجيه. هذا صحيح بشكل خاص إذا تم لعب دور النظام المحلي بواسطة كمبيوتر محمول يمكنه الاتصال بالشبكة من أماكن مختلفة.



لكن مهمتنا ، على الرغم من كل هذه الصعوبات ، لا يزال من الممكن حلها. هناك جزأين لحلها.



أولا - من الضروري عند الاتصالsshmount، حدد وسيطة إضافية (يمكن تحرير الملف إذا كنت تريد تنفيذ أمر مشابه باستمرار):



sshmount MyServer -R 5555:localhost:22


ثانيًا ، بعد الاتصال بالمضيف ، تحتاج إلى تشغيل الأمر التالي:



sshfs -p 5555 localhost:/home/me ~/local


بفضل الخيار -R، يتم إنشاء مقبس على المنفذ على الجهاز البعيد 5555(والذي يجب أن يكون بالطبع مجانيًا) ويتم توصيله بمنفذ 22الجهاز المحلي. بافتراض أن خادم ssh يعمل على المنفذ 22، فإن هذا سيسمح للخادم بالاتصال بالجهاز المحلي عبر نفس الاتصال. لا يحتاج إلى معرفة عنوان IP الخاص بنا أو أن يكون لديك منفذ مفتوح. يربط



الأمر sshfs، الذي يمكن تنفيذه عند بدء تشغيل النظام ، الدليل المحلي /home/meبالدليل الموجود على ~/localالخادم البعيد. بالإضافة إلى ذلك ، إذا قمت بتسجيل الدخول محليًا ، يمكنك إلقاء نظرة على متغيرات البيئة التي تبدأ SSH_بمعرفة المزيد حول اتصال SSH. على سبيل المثال ، هذه هي المتغيرات $SSH_CLIENTو $SSH_TTY.



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



النتيجة



أفترض أنك بحاجة إلى توخي الحذر عند تركيب المجلدات البعيدة على الجهاز المحلي والمجلدات المحلية على الجهاز البعيد في نفس الوقت. على سبيل المثال ، يمكن أن يتم الخلط بين الأدوات المساعدة التي تفحص نظام الملفات بأكمله في مثل هذه التكوينات. بالإضافة إلى ذلك ، ما زلت أبحث عن إجابة لسؤال كيفية قطع الاتصال بشكل صحيح بنظام ملفات الخادم عند الخروج من الجلسة الأخيرة.



ولكن حتى الآن كل هذا يعطينا أدوات جيدة لتنظيم عمل مناسب وموثوق مع ملفات البرامج ssh. وتجدر الإشارة إلى أن هناك خيارًا آخر لحل مشكلة العمل مع الملفات على الأنظمة البعيدة ، وهو مزامنة المجلدات واستخدامها لنقل الملفات بين أجهزة الكمبيوتر.



ما الذي تستخدمه للعمل مع الملفات على أنظمة Linux البعيدة؟










All Articles