Функция emacs для отправки пароля в минибуфер, когда его попросят

Я обычно подключаюсь к машине через SSH и использую ssh.el, Я определил команду, чтобы я мог сделать это быстро:

(defun ssh-me()
  (interactive)
  (ssh "myuser@myhost"))

После этого мини-буфер запрашивает у меня пароль и все отлично работает. Мне интересно, есть ли способ установить мой пароль в моей функции, чтобы мне не приходилось писать его каждый раз, когда я хочу подключиться к этой машине, чтобы у меня было что-то вроде:

(defun ssh-me()
  (interactive)
  (ssh "myuser@myhost")
  (send-password-to-minibuffer "mypasswd"))

Это возможно?

1 ответ

Решение

Вот пример использования небольшого пользовательского файла, который не зашифрован. В этом примере имя файла .authinfo_iphone и он содержит только одну строку - я использую его для подключения к джейлбрейкнутому iphone через ssh:

machine localhost login root password alpine port ssh

Затем я использую небольшую функцию для подключения:

(defun lawlist-remote-iphone-data ()
(interactive)
  (let ((auth-sources '("/Users/HOME/.0.data/.0.emacs/.authinfo_iphone")))
    (find-file "/ssh:root@localhost#2222:/private/var/mobile/.0.data/")))

Вы также можете использовать внешнюю утилиту, такую ​​как sshpass а затем написать функцию - командная строка выглядит так:

/usr/bin/sshpass -p 'my-password' ssh my-username@12.34.56.789

А вот пример функции, которая включает в себя эту командную строку для входа в iPhone через ssh. Это предполагает, что уже есть открытый буфер режима оболочки с процессом, названным *shell*,

(defun shell-iphone ()
"From an existing shell buffer with a process named `*shell*`,
log-in to the iPhone using sshpass."
(interactive)
  (let* (
      (password "alpine")
      (port "2222")
      (username "root")
      (host "localhost")
      (sshpass "/Users/HOME/.0.data/.0.emacs/bin/sshpass")
      (ssh "/usr/bin/ssh")
      (dir "/private/var/mobile/.0.data"))
    (comint-send-string "*shell*"
      (mapconcat 'identity `(
        ,sshpass
        "-p"
        ,password
        ,ssh
        "-p"
        ,port
        "-l"
        ,username
        ,host
        "-t"
        "\"cd " ,dir " && bash --login\"") " "))
    (comint-send-input)))
Другие вопросы по тегам