Я пытаюсь создать сочетания клавиш для некоторых наиболее часто используемых команд оболочки 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"))
.
Как насчет:
(shell-command (concat "echo " (shell-quote-argument (read-passwd "Password? "))
" | sudo -S your_command_here"))
sudo
пытается открыть терминальное устройство (tty), чтобы прочитать пароль. Ваш процесс emacs может не иметь управляющего терминала. sudo -S
указывает ему использовать стандартный ввод для пароля, который должен поступать из emacs.
Обходной путь (вместо решения emacs):
Настройте пару ключей ssh, чтобы пароль не требовался.
Процедура:
ssh-keygen
, чтобы сгенерировать пару ключей. Дайте им удобное имя, чтобы отделить их от всех остальных, которые вы создадите, когда воспользуетесь этим $ HOME / .ssh
для принимающая учетная запись $ HOME / .ssh
учетной записи отправителя (вы можете скопировать ее в несколько учетных записей отправителей, но она может быть лучше создать отдельную пару ключей для каждой входящей машины) $ HOME / .ssh / config
на отправляющей машине, чтобы указать ssh, какой ключ использовать РЕДАКТИРОВАТЬ: ответ Скотта выше намного предпочтительнее этого взлома. Используйте это.
Возможное решение:
Я обнаружил, что установка утилиты, запрашивающей пароль по умолчанию, решает эту проблему.
Мне нужно было добавить Значения по умолчанию: ВСЕ askpass = / usr / lib / openssh / gnome-ssh-askpass
в мой файл / etc / sudoers
(используя ] sudo visudo
, очевидно).
Eval-ing (команда оболочки "sudo /etc/init.d/apache2 restart")
теперь запрашивает пароль вместо того, чтобы безуспешно его угадывать.
Я не принимаю этот ответ, пока не станет ясно, что лучшего решения нет; в идеале я бы хотел что-то, что решает проблему внутри Emacs, вместо того, чтобы требовать от вас копаться в вашем каталоге / etc
.
Я использовал следующее, чтобы запустить nmap из emacs как root,
Если вы используете emacs22 или новее, вы можете просто запустить оболочку из emacs и выполнить там свою команду sudo. Он автоматически перенаправит вас в окно минибуфера для вашего пароля:
M-x shell
sudo whoami
Это должно просто запросить ваш пароль внизу экрана ( без его отображения).