سؤال

أرغب في فتح ملف داخل Emacs الموجود على خادم بعيد ، مع صلاحيات Sudo على الخادم. يمكنني فتح الملفات المحلية مع Sudo عبر Tramp مثل هذا:

C-x C-f /sudo::/home/user/file

لكني أريد استخدام sudo على الخادم:

C-x C-f /sudo::user@server/home/user/file

ولكن هذا يعطيني قوى Sudo على جهاز محلي ، فهو يسأل عن كلمة مرور Sudo الخاصة بي على الجهاز المحلي. هل هناك طريقة لاستخدام Sudo على الخادم؟

راجع للشغل: EMACs غير مثبتة على الخادم

هل كانت مفيدة؟

المحلول

اعتبارًا من emacs 24.3 ، تمثيلي القديم multi: تم تصميم بناء الجملة فوق الحديثة tramp-default-proxies-alist النهج ، وهذا يعني أنه يمكنك مرة أخرى أداء محركات متعددة دون أي تكوين مسبق. للحصول على التفاصيل ، راجع:

الفصلأناز (tramp) Ad-hoc multi-hops RET

مع بناء الجملة الجديد ، يتم فصل كل "قفزة" |. المثال في الدليل هو:

CXراجع /ssh:bird@bastion|ssh:you@remotehost:/path RET

الذي يتصل أولاً كما bird@bastion, ومن هناك إلى you@remotehost:/path

/su: أو /sudo: على المضيفين عن بعد

يمكنك أيضًا استخدام هذا الجملة إلى sudo/su لجذر (أو بالطبع أي مستخدم آخر) على مضيف بعيد:

CXراجع /ssh:you@remotehost|sudo:remotehost:/path/to/file RET

الأهمية: تأكد من تحديد اسم المضيف بشكل صريح: sudo:remotehost: عوضا عن sudo:: (انظر أدناه).

لأن هذا لا يزال يستخدم آلية الوكيل تحتها ، tramp-default-proxies-alist يجب الآن تشمل القيمة ("remotehost" "root" "/ssh:you@remotehost:")

وهذا يعني أن الوكيل /ssh:you@remotehost: سيتم استخدامه كلما طلبت ملف كما root@remotehost.

root هل المستخدم الافتراضي لهذه الطرق ، ولكن يمكنك بالطبع أيضًا التغيير إلى مستخدم غير الجذر مع:

CXراجع /ssh:you@remotehost|sudo:them@remotehost:/path/to/file RET

حدد دائمًا اسم المضيف البعيد بشكل صريح

ربما تكون معتادًا على استخدام sudo:: أو su:: وحذف اسم المضيف. إذا كنت كذلك البقاء على المضيف المحلي ، لا يزال هذا جيدًا ، ولكن إذا كنت تتنقل إلى خادم بعيد ، فأنت أنت يجب حدد اسم المضيف لكل قفزة - حتى لو كان كما هو الحال بالنسبة للقفز السابق. دائما يستخدم sudo:hostname: أو su:hostname: مع المضيفين عن بعد.

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

باختصار ، لا تستخدم :: عندما تكون متعددًا!

نصائح أخرى

تحديث: على الرغم من أن هذه الإجابة حلت المشكلة الأصلية ، فقد تمت كتابتها لـ Emacs 20 أو 21. بالنسبة لـ Emacs 24 ، أوصيك باستخدام إجابة فيلز لأنه يقدم المزيد من التفسير وهو محدث.


أظن أسماء الملفات متعددة القبع في ترامب هو ما تبحث عنه.

سيكون القفزة الأولى SSH والثاني سيكون Sudo.


تحديث: تدعم الإصدارات الحديثة من EMACs القفزات المتعددة باستخدام الوكلاء:

(add-to-list 'tramp-default-proxies-alist ("my-sudo-alias" nil "/ssh:user@ssh-host"))

ثم استدعاء عن طريق الافتتاح:

/sudo:my-sudo-alias:file-on-ssh-host

واجهت بعض المشاكل مع الإجابة المحددة. ومع ذلك ، فقد نجحت عندما أضفت هذا الخط إلى .emacs:

(add-to-list 'tramp-default-proxies-alist '(".*" "\\`root\\'" "/ssh:%h:"))

ثم نفذ ما يلي:

/sudo:ssh-host:file-on-ssh-host

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

/ssh:ssh-host:file-on-ssh-host

من صفحة ويب تكوين Tramp Multi-Hops

 (add-to-list 'tramp-default-proxies-alist
                   '(nil "\\`root\\'" "/ssh:%h:"))
      (add-to-list 'tramp-default-proxies-alist
                   '((regexp-quote (system-name)) nil nil))

ثم أي

C-x C-f /sudo:remote-host:/file

سيفتح الملف باستخدام سودو بعد تسجيل الدخول مع اسم المستخدم نفسه للمستخدم الذي يقوم بتشغيل EMACs ولكن على الجهاز البعيد.

يجب عليك ssh في الخادم أولاً ، ثم يجب عليك تشغيل emacs محليًا.

أو يمكنك استخدام NFS مع no_root_squash ، أو يمكنك المحاولة مع خادم/عميل emacs ، على الرغم من أنه ليس لدي أي فكرة عما قد يحدث (لا تستخدم emacs بنفسي)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top