จะให้ eshell จดจำรหัสผ่าน sudo ได้สองนาทีได้อย่างไร


15

ในการbashเรียกใช้sudo ...คำศัพท์ทั่วไปเมื่อฉันเรียกใช้คำสั่ง bash จะจดจำรหัสผ่านของฉันได้ครู่หนึ่ง ทำให้การจัดการบรรจุภัณฑ์ง่ายขึ้น

ตัวอย่างเช่น:

sudo apt-get update
# password ......
sudo apt-get install turing-brain
# execute without requiring password again.

เป็นไปได้ไหมที่จะทำให้สำเร็จใน eshall?

(ฉันรู้termหรือansi-termใน Emacs สามารถทำได้ แต่ eshell รวมเข้ากับ Emac ได้ดีขึ้น)

คำตอบ:


14

ก่อนอื่นให้ตรวจสอบว่าsudoใดถูกดำเนินการในเซสชัน eshell ของคุณ มันอาจเป็น sudo ของระบบของคุณ:

$ which sudo
/path/to/system/wide/sudo
$ which *sudo
/path/to/system/wide/sudo

หรือ sudo ของ eshell:

$ which sudo
sudo is a compiled Lisp function in `em-tramp.el'
$ which eshell/sudo
eshell/sudo is a compiled Lisp function in `em-tramp.el'

sudoของ Eshell ใช้วิธี su หรือ sudo ของ TRAMP คำสั่งเหล่านี้อยู่ในโมดูล eshell-tramp ซึ่งถูกปิดใช้งานตามค่าเริ่มต้น

ฉันจะครอบคลุมกรณี sudo ของ eshell เนื่องจากเป็นภายใน Emacs และไม่ได้ขึ้นอยู่กับ distro OS ของคุณ:

  1. โหลดโมดูล eshell-tramp:

    (require 'em-tramp) ; to load eshell’s sudo
    
  2. เปลี่ยนเป็น sudo ของ eshell

    • โดยชอบคำสั่งในตัว

      (setq eshell-prefer-lisp-functions t)
      

      ดูเหมือนว่าใน Emacs 24.4 เราจำเป็นต้องตั้งค่า

      (setq eshell-prefer-lisp-variables t)
      
    • โดยการสร้างนามแฝง (ดำเนินการตัวอย่างใน eshell)

      alias sudo 'eshell/sudo $*'
      

      นามแฝงที่กำหนด (หรือลบ) โดยคำสั่ง alias จะถูกเขียนลงในไฟล์ที่ชื่อโดยeshell-aliases-fileโดยอัตโนมัติซึ่งคุณสามารถแก้ไขได้โดยตรง (แม้ว่าคุณจะต้องโหลดซ้ำด้วยตนเอง)

  3. ในที่สุดเปิดใช้งานการแคชรหัสผ่านสำหรับ sudo (และ TRAMP) ของ eshell:

    (setq password-cache t) ; enable password caching
    (setq password-cache-expiry 3600) ; for one hour (time in secs)
    

ป.ล. ถ้าคุณได้เปลี่ยนพรอมต์ของคุณด้วยeshell-prompt-functionจากนั้นอย่าลืมปรับ prompt regex eshell-prompt-regexpตามนั้น regex ที่ไม่ถูกต้องอาจทำให้ฟังก์ชันการทำงานของ eshell ผิดพลาดรวมถึงการตรวจจับรหัสผ่าน


หลังจากทำตามคำแนะนำเหล่านี้which sudoจะยังคงปรากฏ/usr/bin/sudoในระบบของฉัน
Boccaperta-IT

คุณทดสอบด้วยบัฟเฟอร์ eshell ใหม่หรือไม่ IIRC เซสชัน eshell ปัจจุบันจะไม่รับการเปลี่ยนแปลง
kmicu

ใช่. ฉันรีสตาร์ท emacs daemon และเปิดไคลเอนต์ใหม่
Boccaperta-IT

หลังจากการทดสอบแบบตื้นฉันเห็นว่าจำเป็นต้องใช้(setq eshell-prefer-lisp- ตัวแปร t) ใน emacs 24.4 @ Boccaperta-IT คุณสามารถยืนยันได้ไหมว่ามันเหมาะกับคุณหรือไม่?
kmicu

ยังใช้งานไม่ได้/usr/bin/sudo(ฉันใช้ Emacs 25.0.50.1)
Boccaperta-IT

4

ที่จะได้รับ sudo ทำงานใน Emacs 26 (อาจจะเหมือนกันสำหรับ Emacs 25) โดยไม่ทำให้นามแฝงฉันมีการเพิ่มการeshell-trampeshell-modules-list

(add-to-list 'eshell-modules-list 'eshell-tramp)

ยังต้อง(require 'esh-module)
นีโอ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.