2014-11-03 4 views
0

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

(defun ssh-me() 
    (interactive) 
    (ssh "[email protected]")) 

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

(defun ssh-me() 
    (interactive) 
    (ssh "[email protected]") 
    (send-password-to-minibuffer "mypasswd")) 

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

+1

Как насчет использования ssh config или '.netrc'? Просто спрашиваю. – Ehvince

+0

Действительно, похоже, что вы ищете аутентификацию на основе сертификата для ssh. Это напрямую не отвечает на ваш вопрос, но я чувствую, что это проблема [XY] (http://meta.stackexchange.com/a/66378). –

+0

Не знаком с ssh.el, но, может быть, вы могли бы решить эту проблему, создав файл идентификации без парольной фразы для входа в систему без пароля? – vikramls

ответ

0

Ниже приведен пример использования небольшого пользовательского файла, который не зашифрован. В этом примере имя файла .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:[email protected]#2222:/private/var/mobile/.0.data/"))) 

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

/usr/bin/sshpass -p 'my-password' ssh [email protected] 

И вот примерная функция, которая включает эту командную строку для входа в 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))) 
+0

В итоге я использовал немного другое решение, но я использую 'sshpass' и модифицировал функцию emacs. Спасибо за вашу помощь :) – makeMonday

 Смежные вопросы

  • Нет связанных вопросов^_^