8

我在我的 Ubuntu 上网本上以全屏模式使用 GNU Emacs。当我编辑受版本控制的文件并点击 Cx vv 以提交最新更改时,将打开一个 OpenSSH 弹出窗口并询问我的存储库所在服务器的密码。

不幸的是,由于全屏模式,弹出窗口不会出现在前面,我无法输入密码。但它仍然是模态的,所以我也不能回到 emacs,比如说,离开全屏模式(或者做任何其他事情,比如 Cg)。我基本上被困住了。

作为一个 emacs 用户,无论如何我觉得弹出窗口的想法很恶心 ;-) 所以理想情况下,我希望被要求在 minibuffer 中输入 ssh 密码。如何调整我的设置以实现这一目标?(我更喜欢每次都输入密码,而不是将密钥对存储在 ~/.ssh/ 中)。

4

6 回答 6

7

您可以ssh-agent在启动之前使用emacs(或在另一个 shell 中)。

于 2010-07-14T11:44:03.753 回答
1

可能是 ssh-askpass 程序启动了,我认为它会查看 DISPLAY 环境变量来决定如何请求密码。如果设置,它会弹出一个图形窗口,如果没有,它会询问 TTY。

如果 vcs 子系统检测到何时向用户请求密码(很可能),那么您可以取消设置子进程的 $DISPLAY:

(setenv "DISPLAY" nil)

但是,这可能会产生其他负面影响,因此请查看“man ssh-askpass”以防万一。

(免责声明:我个人使用基于 ssh-agent 的解决方案,强烈推荐。)

于 2010-07-16T13:30:55.067 回答
1

我在这里推测,因为我既没有在 Emacs 中使用 CVS 或 vc,但我认为 Emacs 正在向适当的程序执行提交,并且密码提示完全是 Emacs 外部的东西。所以我怀疑您想要做的是首先找出在没有 Emacs 的情况下从您的 shell 执行无 GUI 提交所需的选项,然后在 Emacs 中修改vc-checkin-switches(或定义vc-cvs-checkin-switches)以匹配(参见 参考资料defun vc-switches)。

于 2010-07-15T11:06:09.620 回答
1

您可以让 ssh 通过现有连接多路复用到服务器的所有新连接。这意味着只要您打开了一个 ssh 连接(比如在 shell 中),到同一个远程主机的新连接就不会要求输入密码。我用

Host *
    ControlPath ~/.ssh/master-%r@%h:%p
    ControlMaster auto
    ServerAliveInterval 30

在 ~/.ssh/config 中进行设置。

于 2011-06-13T15:28:30.237 回答
1

尝试以某种方式在您的环境中设置它:

export CVS_RSH='ssh -o PreferredAuthentications="password"'

这应该让它停止尝试公钥身份验证,这也将抑制图形 ssh-askpass 的显示。这通过指定 CVS 将用于连接到远程服务器的 SSH 命令来工作。请注意,这将适用于从您设置环境变量的上下文中运行的所有 CVS 命令。

您可能还想研究在您的~/.ssh/config. 您可以分别为每个主机设置选项。这是一个大致显示如何的页面,尽管用于强制公钥身份验证。请注意,这将影响您用户帐户的所有 SSH 使用,而不仅仅是 CVS。这很可能是您正在寻找的东西,因为您似乎更喜欢避免公钥身份验证。这是您要添加的块的示例~/.ssh/config

Host cvs

  Hostname cvs.your.corp
  User yourCVSusername
  PreferredAuthentications password

或者,您可以更改Host cvs为,Host cvs.your.corp如果您现有的访问方式使用 FQDN 而不仅仅是主机名。

最后,您可以~/.ssh/config仅通过这一行来获取文件(或将其添加到现有行的顶部):

PreferredAuthentications password

这将使首选项适用于与远程主机的所有 SSH 连接。

祝你好运。我希望这能让你摆脱模态对话框的陷阱。

于 2011-06-15T21:37:53.073 回答
1

在研究我的主要答案(上图)时,我遇到了psvn for emacs。有关更多详细信息,请参阅此 SO 问题/答案:SVN for Emacs:您如何设置作者姓名并保存密码?

我想您可能也会喜欢了解 psvn,但我认为在 SSH 上设置 PreferredAuthentications 值更直接适用于您最初提出的问题。

于 2011-06-15T21:42:52.387 回答