Bagaimana membiarkan eshell mengingat kata sandi sudo selama dua menit?

15

Secara umum istilah runing bash, ketika saya menjalankan sudo ...perintah, bash akan mengingat kata sandi saya untuk sementara waktu. Ini membuat tugas manajemen paket lebih mudah.

Sebagai contoh:

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

Apakah mungkin untuk mencapainya di eshall?

(Saya tahu termatau ansi-termdi Emacs bisa melakukan ini. Tapi eshell berintegrasi lebih baik dengan Emacs.)

Nick
sumber

Jawaban:

14

Pertama-tama periksa sudo mana yang dieksekusi di sesi eshell Anda. Ini bisa menjadi sudo sistem Anda:

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

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

Eshell ini sudo menggunakan gelandangan ini su atau sudo metode. Perintah-perintah ini ada dalam modul eshell-tramp, yang dinonaktifkan secara default.

Saya akan membahas kasus sudo eshell, karena ini internal untuk Emacs dan tidak bergantung pada distro OS Anda:

  1. Muat modul eshell-tramp:

    (require 'em-tramp) ; to load eshell’s sudo
    
  2. Beralih ke sudo eshell

    • dengan lebih memilih perintah bawaan

      (setq eshell-prefer-lisp-functions t)
      

      Tampaknya dalam Emacs 24.4 kita perlu mengatur

      (setq eshell-prefer-lisp-variables t)
      
    • dengan membuat alias (jalankan cuplikan di eshell)

      alias sudo 'eshell/sudo $*'
      

      Alias ​​yang didefinisikan (atau dihapus) oleh perintah alias secara otomatis ditulis ke file bernama oleh eshell-aliases-file , yang juga dapat Anda edit secara langsung (walaupun Anda harus memuat ulang secara manual).

  3. Akhirnya aktifkan caching kata sandi untuk sudo eshell (dan TRAMP):

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

PS Jika Anda telah mengubah prompt Anda dengan eshell-prompt-function , maka ingatlah untuk menyesuaikan prompt regex eshell-prompt-regexp sesuai. Regex prompt yang salah dapat merusak beberapa fungsi eshell - termasuk deteksi kata sandi.

kmicu
sumber
Setelah mengikuti instruksi ini, which sudomasih ditampilkan /usr/bin/sudodi sistem saya.
Boccaperta-IT
Apakah Anda mengujinya dengan buffer eshell segar ? Sesi ellell IIRC saat ini tidak akan menerima perubahan.
kmicu
Iya. Saya memulai kembali daemon emacs dan membuka klien baru.
Boccaperta-IT
Setelah pengujian dangkal saya melihat bahwa (setq eshell-prefer-lisp- variabel t) diperlukan dalam emacs 24.4. @ Boccaperta-IT dapatkah Anda mengonfirmasi apakah itu cocok untuk Anda?
kmicu
Tidak berfungsi, masih /usr/bin/sudo(saya menggunakan Emacs 25.0.50.1, meskipun)
Boccaperta-IT
4

Untuk mendapatkan sudo bekerja di Emacs 26 (mungkin sama untuk Emacs 25) tanpa membuat alias aku harus menambahkan eshell-trampuntuk eshell-modules-list.

(add-to-list 'eshell-modules-list 'eshell-tramp)
Tanggapi
sumber
juga perlu(require 'esh-module)
nymo