Làm thế nào để eshell nhớ mật khẩu sudo trong hai phút?


15

Trong một thuật ngữ chung bash, khi tôi chạy một sudo ...lệnh, bash sẽ nhớ mật khẩu của tôi trong một thời gian. Điều này làm cho nhiệm vụ quản lý gói dễ dàng hơn.

Ví dụ:

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

Có thể thực hiện nó trong eshall?

(Tôi biết termhoặc ansi-termtrong Emacs có thể làm điều này. Nhưng eshell tích hợp tốt hơn với Emacs.)

Câu trả lời:


14

Trước hết hãy kiểm tra sudo nào được thực thi trong phiên eshell của bạn. Nó có thể là sudo hệ thống của bạn:

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

hoặc udoell sudo:

$ 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'

Eshell's sudo sử dụng phương pháp su hoặc sudo của TRAMP. Các lệnh này nằm trong mô-đun eshell-tramp, được tắt theo mặc định.

Tôi sẽ trình bày trường hợp sudo của eshell, vì nó là nội bộ của Emacs và nó không phụ thuộc vào bản phân phối hệ điều hành của bạn:

  1. Tải mô-đun eshell-tramp:

    (require 'em-tramp) ; to load eshell’s sudo
    
  2. Chuyển sang sudo của eshell

    • bằng cách thích các lệnh tích hợp

      (setq eshell-prefer-lisp-functions t)
      

      Có vẻ như trong Emacs 24.4 chúng ta cần thiết lập

      (setq eshell-prefer-lisp-variables t)
      
    • bằng cách tạo bí danh (thực thi đoạn trích trong eshell)

      alias sudo 'eshell/sudo $*'
      

      Các bí danh được xác định (hoặc xóa) bằng lệnh bí danh sẽ tự động được ghi vào tệp có tên eshell-aliases-file , bạn cũng có thể chỉnh sửa trực tiếp (mặc dù bạn sẽ phải tải lại thủ công).

  3. Cuối cùng kích hoạt bộ đệm ẩn mật khẩu cho sudo của eshell (và TRAMP):

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

PS Nếu bạn đã thay đổi lời nhắc của mình với hàm eshell-prompt-function , thì hãy nhớ điều chỉnh dấu nhắc regex eshell-prompt-regrec tương ứng. Regex nhắc nhở sai có thể phá vỡ một số chức năng eshell - bao gồm cả phát hiện mật khẩu.


Sau khi làm theo các hướng dẫn này, which sudovẫn hiển thị /usr/bin/sudotrên hệ thống của tôi.
Boccaperta-IT

Bạn đã thử nó với một bộ đệm eshell tươi ? Phiên eshell hiện tại của IIRC sẽ không nhận thay đổi.
kmicu

Đúng. Tôi khởi động lại emacs daemon và mở một ứng dụng khách mới.
Boccaperta-IT

Sau khi thử nghiệm nông, tôi thấy rằng (setq eshell-prefer-lisp- biến t) là bắt buộc trong emacs 24.4. @ Boccaperta-IT bạn có thể xác nhận nếu nó hoạt động cho bạn?
kmicu

Tuy nhiên, vẫn không hoạt động /usr/bin/sudo(Tôi đang sử dụng Emacs 25.0.50.1)
Boccaperta-IT

4

Để có được sudo hoạt động trong Emacs 26 (có lẽ giống với Emacs 25) mà không cần đặt bí danh, tôi phải thêm eshell-trampvào eshell-modules-list.

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

cũng cần phải(require 'esh-module)
nymo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.