2014-11-03 143 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 2014-11-03 13:42:11

+0

這聽起來像是你正在尋找基於證書的ssh認證。這不直接回答你的問題,但我覺得這是[XY問題](http://meta.stackexchange.com/a/66378)。 – 2014-11-03 18:32:50

+0

不熟悉ssh.el,但也許你可以通過創建不帶密碼的識別文件來解決此問題,無需密碼就可以登錄? – vikramls 2014-11-07 20:52:05

回答

0

以下是使用未加密的小型自定義文件的示例。在這個例子中,文件名是.authinfo_iphone,它僅包含一個行 - 我用它通過ssh連接到我的越獄的iPhone:

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] 

這裏是一個示例函數,它包含該命令行通過ssh登錄到iPhone。它考慮到已經有一個開放的shell模式緩衝區,其進程名爲*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 2014-11-04 11:52:59

相關問題