الرئيسية
» لينوكس
»
كيفية تثبيت دليل SSHFS عن بُعد تلقائيًا عند بدء التشغيل في دبيان
كيفية تثبيت دليل SSHFS عن بُعد تلقائيًا عند بدء التشغيل في دبيان
تقوم بتهيئة نقطة ربط SSHFS، وتتأكد من عملها، ثم تعيد تشغيل دبيان، وفجأة تجد المجلد البعيد فارغًا مرة أخرى. نجح الأمر اليدوي لأنك كنت مسجلاً دخولك، وكانت الشبكة متصلة بالفعل، وكان بإمكان SSH طلب تأكيد كلمة المرور أو مفتاح المضيف. أما نقاط الربط التي تتم أثناء بدء التشغيل فلا توفر هذه الميزات.
الحل الأمثل هو جعل مصادقة SSH غير تفاعلية، وإنشاء /etc/fstabمدخل دائم، وإخبار systemd بأن نظام الملفات يعتمد على الشبكة. يبدأ هذا الدليل بأبسط إعداد عملي، ثم يُضيف خيارات للشبكات البطيئة وجلسات SSH المنقطعة. تستخدم الأمثلة user@server.example.com:/srv/dataالدليل البعيد /mnt/remoteونقطة التحميل المحلية.
تُدرج صفحة حزمة دبيان حاليًا الإصدار 3.7.3 من SSHFS لنظام دبيان 12 (بوكوورم)، ويستخدم SSHFS نظام SFTP الفرعي المُقدّم من SSH. راجع صفحة حزمة SSHFS الخاصة بدبيان ودليل SSHFS الأصلي . تختلف مراجعات الحزمة بين إصدارات دبيان، ولكن طريقة التثبيت عند بدء التشغيل الموضحة أدناه تعتمد على سلوك fstab وsystemd القياسي.
لماذا يعمل نظام الملفات SSHFS يدوياً ولكنه يفشل عند بدء التشغيل؟
تُعزى معظم حالات الفشل إلى ثلاثة أسباب. أولًا، قد يتطلب SSH كلمة مرور أو عبارة مرور للمفتاح أو تأكيدًا أوليًا لمفتاح المضيف. ولا يوجد لدى عملية بدء التشغيل طرفية للاستجابة لهذه المطالبات. ثانيًا، قد يبدأ التثبيت قبل أن تصبح الشبكة أو نظام أسماء النطاقات (DNS) قابلة للاستخدام بشكل كامل. ثالثًا، قد يصبح اتصال SSH طويل الأمد غير مستقر بعد انقطاع الشبكة.
توضح وثائق systemd الخاصة بنظام دبيان أن هذا _netdevالخيار يُجبر النظام على التعامل مع نقطة التحميل كنقطة تحميل شبكية. وتُرتّب نقاط التحميل الشبكية بعد نقطة التحميل الرئيسية network-online.target. وتشير الوثائق نفسها إلى أنه /etc/fstabيتم تحويل الإدخالات إلى وحدات تحميل systemd أصلية عند بدء التشغيل. راجع systemd.mount(5) في دبيان .
1. قم بتثبيت SSHFS وإنشاء نقطة التحميل
قم بتثبيت عميل SSHFS المعبأ وقم بإنشاء الدليل المحلي الذي سيعرض الملفات البعيدة:
يعتمد نظام SSHFS على FUSE، وهو نظام ملفات لينكس في واجهة مساحة المستخدم. في دبيان 12، sshfsتعتمد الحزمة على FUSE 3 وعميل OpenSSH.
قم بتثبيت حزمة SSHFS وقم بإنشاء الدليل المحلي الذي سيصبح نقطة التحميل.
2. قم بإعداد مصادقة SSH التي يمكن تشغيلها بدون مطالبة.
بالنسبة لعملية ربط على مستوى النظام يتم تشغيلها بواسطة systemd، فإن إنشاء مفتاح مخصص مملوك للمستخدم الجذر أمر بسيط لأن أداة الربط تعمل بصلاحيات المستخدم الجذر. لا تقم بإنشاء مفتاح بدون عبارة مرور إلا إذا كان الجهاز نفسه موثوقًا به وكان المفتاح مخصصًا لهذا الغرض فقط.
إذا تم تنفيذ هذا الأمر بنجاح دون أي مطالبة، فهذا يعني أن عملية المصادقة جاهزة للإقلاع. أما إذا طُلب منك تأكيد بصمة الخادم، فقم بالاتصال مرة واحدة بشكل تفاعلي بصلاحيات المستخدم الجذر، وتحقق من البصمة باستخدام مصدر موثوق، ثم وافق عليها. لا تحاول تجاوز أخطاء مفتاح المضيف عن طريق تعطيل التحقق من المضيف.
تُعدّ وثائق OpenSSH BatchMode=yesمُخصصة تحديدًا للبرامج النصية ومهام الدفعات لأنها تُعطّل مطالبات كلمة المرور والتأكيد. يتم التحقق من مفاتيح المضيف مقابل ملف المستخدم known_hosts. راجع دليل Debian ssh(1) و ssh_config(5) .
قم بإعداد الوصول إلى SSH باستخدام المفاتيح وتحقق من إمكانية نجاح الاتصال دون إدخال تفاعلي.
3. تأكد من تثبيت SSHFS يدويًا قبل تعديل fstab
لا تقم بتصحيح ترتيب الإقلاع حتى يعمل أمر SSHFS الأساسي. قم بتثبيت الدليل مرة واحدة باستخدام نفس المفتاح:
تأكد من إمكانية عرض قائمة الملفات البعيدة، ثم قم بإلغاء تحميلها قبل اختبار ملف fstab:
ls -la /mnt/remote
sudo fusermount3 -u /mnt/remote
يوصي دليل SSHFS الأصلي reconnectبإعادة إنشاء الاتصالات المتقطعة. كما يوضح أنه ServerAliveIntervalيمكن منع حدوث تجميد ظاهري عند انقطاع اتصال SSH خامل دون إشعار. مع فاصل زمني قدره 15 ثانية وعدد محاولات الفحص غير المجابة الافتراضي في OpenSSH وهو ثلاث محاولات، يتم اكتشاف انقطاع الاتصال في غضون 45 ثانية تقريبًا؛ وقد ذُكر العدد هنا صراحةً ليكون السلوك واضحًا.
fuse.sshfsيتعرف نظام التثبيت في دبيان على هذا النوع الفرعي. كما يوثق دليل SSHFS الأصلي sshfsهذا النوع كنظام ملفات fstab، ويقدم ملاحظات fuse.sshfsحول التوافق. ويصف دليل fstab(5) الخاص بدبيان الحقول الستة في fstab، ويوصي باستخدام تدوين النوع الفرعي لنظام الملفات مثل fuse.sshfs.
خيار
لماذا هو هنا؟
_netdev
يجعل نظام systemd يتعامل مع نقطة التحميل على أنها تعتمد على الشبكة.
IdentityFile=...
يختار المفتاح الخاص بشكل صريح بدلاً من الاعتماد على وكيل تفاعلي.
BatchMode=yes
يفشل بدلاً من انتظار كلمة المرور أو طلب التأكيد.
reconnect
يسمح لـ SSHFS بإعادة إنشاء اتصال منقطع.
ServerAliveInterval=15
يرسل طلبات التحقق من الاتصال بمستوى SSH أثناء فترات الخمول.
ServerAliveCountMax=3
يحد من عمليات التحقق من الاتصال التي لم تتم الإجابة عليها قبل قطع اتصال SSH.
default_permissions
يُمكّن من التحقق من الأذونات المحلية بالإضافة إلى التفويض عن بُعد.
أضف نقطة تحميل SSHFS إلى /etc/fstab مع خيارات الشبكة والهوية وإعادة الاتصال الصريحة.
5. اختبر إدخال fstab قبل إعادة التشغيل
/etc/fstabيسهل إصلاح الخطأ الإملائي قبل إعادة التشغيل. اطلب من systemd إعادة تحميل وحدات التحميل المُنشأة، ثم اختبر الإدخال.
sudo systemctl daemon-reload
sudo mount -a
findmnt -T /mnt/remote
ls -la /mnt/remote
إذا mount -aلم يُرجع الأمر أي خطأ وأبلغ findmntعن خطأ fuse.sshfs، فهذا يعني أن صيغة fstab مقبولة وأن نظام الملفات مُثبّت. ويؤكد دليل الأمر mount(8)mount -a الخاص بنظام دبيان أن الأمر يُثبّت أنظمة ملفات fstab باستثناء الإدخالات المُعلّمة بعلامة noauto.
تحقق من إدخال fstab باستخدام mount -a و findmnt ووحدة التثبيت systemd التي تم إنشاؤها قبل إعادة التشغيل.
ماذا لو لم تكن الشبكة جاهزة في الوقت المناسب؟
_netdevيُوفر systemd دلالات الترتيب الصحيحة، لكن network-online.targetدقته تعتمد على خدمة إدارة الشبكة التي تُوفره. قد تُؤدي شبكات Wi-Fi، وشبكات VPN، وتأخيرات DHCP، وتأخيرات DNS، وبروتوكولات الشبكة غير التقليدية إلى عدم موثوقية عملية بدء التشغيل الفوري.
في هذه الحالة، استخدم خاصية التحميل التلقائي في systemd بحيث تُنشئ عملية الإقلاع نقطة تحميل تلقائي وتُنشئ اتصال SSHFS فقط عند أول وصول إليه /mnt/remote. أضف x-systemd.automountإلى الخيارات:
يُعدّ هذا الخيار الأمثل في أغلب الأحيان لأجهزة الكمبيوتر المحمولة، وأنظمة الواي فاي، والخوادم التي قد يتعذر فيها الوصول إلى المضيف البعيد أحيانًا. يُغيّر هذا الخيار دلالات الاتصال قليلًا: إذ يتم تجهيز التحميل التلقائي أثناء بدء التشغيل، ولكن يتم إنشاء اتصال SSH الفعلي عند أول وصول. إذا كان أحد التطبيقات يتطلب اتصال الدليل البعيد قبل بدء تشغيله، فاحتفظ بتحميل الشبكة العادي، واجعل وحدة systemd الخاصة بهذا التطبيق تعتمد على وحدة التحميل.
هل تحتاج إلى السماح للآخرين؟
بشكل افتراضي، لا يمكن الوصول إلى وحدة تخزين FUSE إلا ضمن الأذونات المرتبطة بسياق التركيب. يوضح دليل SSHFS allow_otherكيفية السماح بالوصول إليها من قِبل مستخدمين محليين آخرين. لا تقم بإضافتها إلا إذا كانت هناك خدمة أو حساب آخر يحتاج فعلاً إلى الملفات المُركّبة.
إذا كنت ستستخدمه allow_other، فراجع /etc/fuse.confأولاً الآثار الأمنية المترتبة على FUSE. يُنصح عمومًا بربطه بـ FUSE default_permissionsلضمان عدم تجاوز عمليات التحقق من صلاحيات نظام Unix المحلي. مع ذلك، يظل حساب SSH البعيد هو الذي يحدد في النهاية العمليات التي يسمح بها الخادم.
استكشاف أخطاء نظام ملفات SSHFS أثناء بدء التشغيل وإصلاحها
ينتظر الحامل كلمة المرور
أعد إجراء الاختبار غير التفاعلي نفسه sudo ssh ... -o BatchMode=yes. إذا فشل، فقم بإصلاح مصادقة المفتاح العام قبل تعديل systemd. يحتاج المفتاح المحمي بعبارة مرور إلى وكيل أو آلية سرية أخرى عند بدء التشغيل؛ لا يمكن لتركيب fstab العادي كتابة عبارة المرور نيابةً عنك.
فشل التحقق من مفتاح المضيف
لا تعتمد StrictHostKeyChecking=noعلى هذا الحل الشامل. تحقق مما إذا تمت إعادة بناء الخادم أو تغيير مفتاح المضيف الخاص به بشكل قانوني. يُعد فحص مفتاح مضيف SSH إجراءً أمنيًا ضد انتحال الهوية وهجمات الوسيط.
يعمل التثبيت بعد تسجيل الدخول ولكنه لا يعمل أثناء بدء التشغيل
تحقق من اسم الوحدة المُنشأة وسجلها. بالنسبة لـ /mnt/remote، يقوم systemd عادةً بتهريب المسار إلى mnt-remote.mount:
systemctl status mnt-remote.mount
journalctl -b -u mnt-remote.mount
إذا أضفت x-systemd.automount، فتحقق أيضًا مما يلي:
systemctl status mnt-remote.automount
يتوقف الوصول بعد اختفاء الخادم أو الشبكة.
تم تفعيل خاصية Keep reconnectوSSH keepalive. يحذر دليل SSHFS الأصلي من أن عمليات نظام الملفات قد تتوقف إلى أجل غير مسمى في حال عدم اكتشاف انقطاع الاتصال. تعمل خاصية Keepalive على تحديد نطاق اكتشاف الأعطال، ولكن أي عملية إدخال/إخراج كانت جارية عند انقطاع الاتصال قد تفشل، وقد يحتاج التطبيق إلى إعادة المحاولة.
كيفية التحقق من أن وحدة التثبيت تبقى سليمة بعد إعادة التشغيل
بعد mount -aنجاح العملية، أعد تشغيل الجهاز:
sudo reboot
بعد إعادة الاتصال، قم بتشغيل هذه الفحوصات:
findmnt -T /mnt/remote
systemctl is-active mnt-remote.mount
ls -la /mnt/remote
إذا اخترت ذلك x-systemd.automount، فقد تكون وحدة التثبيت غير نشطة حتى الوصول الأول. تحقق من التثبيت التلقائي أولاً، ثم قم بتشغيله باستخدام ls:
systemctl is-active mnt-remote.automount
ls -la /mnt/remote
findmnt -T /mnt/remote
تتضمن عملية الإعداد الناجحة أربع خصائص قابلة للملاحظة: إتمام مصادقة SSH تلقائيًا، ونجاح إدخال fstab mount -a، وتعرف systemd على نقطة التحميل كشبكة، وإمكانية الوصول إلى الملفات البعيدة بعد إعادة تشغيل النظام. في حال فشل أي من هذه الاختبارات، يُرجى استكشاف المشكلة في تلك الطبقة مباشرةً بدلاً من إضافة خيارات تحميل إضافية عشوائيًا.