Как я выполняю команду sudo в Emacs?

Я пытаюсь создать сочетания клавиш для некоторых наиболее часто используемых команд оболочки sudo (например, имея C-c s выполненный (shell-command "sudo /etc/init.d/apache2 restart")).

Я пытался использовать прямой вызов команды оболочки как выше, но он просто производит следующее к *Shell Command Output* буфер:

[sudo] password for Inaimathi:
Sorry, try again.
[sudo] password for Inaimathi:
Sorry, try again.
[sudo] password for Inaimathi:
Sorry, try again.
sudo: 3 incorrect password attempts

Это на самом деле не просит пароль. Я не хочу должным быть запускать использование Emacs sudo emacs, но я предполагаю, что это - опция, если ничто иное не будет работать.

Идеальное решение было бы функцией из Emacs (в противоположность возне ОС для изменения поведения оболочки или sudo команда). Что-то как (sudo-shell-command "dostuff"), или (with-password-prompt (shell-command "sudo dostuff")).

14
задан Inaimathi 19 March 2010 в 03:36
поделиться

6 ответов

Как насчет:

(shell-command (concat "echo " (shell-quote-argument (read-passwd "Password? "))
                       " | sudo -S your_command_here"))
13
ответ дан 1 December 2019 в 08:15
поделиться

sudo пытается открыть терминальное устройство (tty), чтобы прочитать пароль. Ваш процесс emacs может не иметь управляющего терминала. sudo -S указывает ему использовать стандартный ввод для пароля, который должен поступать из emacs.

1
ответ дан 1 December 2019 в 08:15
поделиться

Обходной путь (вместо решения emacs):

Настройте пару ключей ssh, чтобы пароль не требовался.

Процедура:

  1. запустите ssh-keygen , чтобы сгенерировать пару ключей. Дайте им удобное имя, чтобы отделить их от всех остальных, которые вы создадите, когда воспользуетесь этим
  2. . Скопируйте общедоступный один в $ HOME / .ssh для принимающая учетная запись
  3. Сохраните частную учетную запись в $ HOME / .ssh учетной записи отправителя (вы можете скопировать ее в несколько учетных записей отправителей, но она может быть лучше создать отдельную пару ключей для каждой входящей машины)
  4. отредактируйте $ HOME / .ssh / config на отправляющей машине, чтобы указать ssh, какой ключ использовать
  5. Profit
3
ответ дан 1 December 2019 в 08:15
поделиться

РЕДАКТИРОВАТЬ: ответ Скотта выше намного предпочтительнее этого взлома. Используйте это.

Возможное решение:

Я обнаружил, что установка утилиты, запрашивающей пароль по умолчанию, решает эту проблему.

Мне нужно было добавить Значения по умолчанию: ВСЕ askpass = / usr / lib / openssh / gnome-ssh-askpass в мой файл / etc / sudoers (используя ] sudo visudo , очевидно).

Eval-ing (команда оболочки "sudo /etc/init.d/apache2 restart") теперь запрашивает пароль вместо того, чтобы безуспешно его угадывать.

Я не принимаю этот ответ, пока не станет ясно, что лучшего решения нет; в идеале я бы хотел что-то, что решает проблему внутри Emacs, вместо того, чтобы требовать от вас копаться в вашем каталоге / etc .

1
ответ дан 1 December 2019 в 08:15
поделиться

Я использовал следующее, чтобы запустить nmap из emacs как root,

http://nakkaya.com/sudoEl.markdown

0
ответ дан 1 December 2019 в 08:15
поделиться

Если вы используете emacs22 или новее, вы можете просто запустить оболочку из emacs и выполнить там свою команду sudo. Он автоматически перенаправит вас в окно минибуфера для вашего пароля:

M-x shell
sudo whoami

Это должно просто запросить ваш пароль внизу экрана ( без его отображения).

4
ответ дан 1 December 2019 в 08:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: