2014-11-03 96 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

相关问题