Emacs / CVS / OpenSSH:阻止密码弹出

时间:2010-07-14 11:39:51

标签: emacs popup cvs openssh

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

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

作为一个emacs用户,我发现弹出窗口的想法无论如何令人厌恶;-)所以理想情况下,我想要在迷你缓冲区中要求输入ssh密码。如何调整我的设置才能实现这一目标? (我更喜欢每次都输入我的密码,而不是在〜/ .ssh /)中存储密钥对。

6 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

(setenv "DISPLAY" nil)

这可能还有其他负面的副作用,所以如果有什么可能帮助的话,也请查看“man ssh-askpass”。

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

答案 3 :(得分:1)

您可以通过现有连接获取ssh以复用与服务器的所有新连接。这意味着只要您打开了一个ssh连接(比如在shell中),新的连接就不会要求输入密码。我用

Host *
    ControlPath ~/.ssh/master-%r@%h:%p
    ControlMaster auto
    ServerAliveInterval 30
在〜/ .ssh / config中进行设置。

答案 4 :(得分:1)

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

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

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

您可能还希望在~/.ssh/config中进行设置。您可以分别为每个主机设置选项。 Here's a page that roughly shows how,虽然强制使用publickey auth。请注意,这将影响您的用户帐户的所有SSH使用,而不仅仅是CVS。这可能是你正在寻找的,因为你似乎更喜欢避免使用publickey auth。以下是您在~/.ssh/config中添加的块的示例:

Host cvs

  Hostname cvs.your.corp
  User yourCVSusername
  PreferredAuthentications password

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

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

PreferredAuthentications password

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

祝你好运。我希望这能让你走出模态对话陷阱。

答案 5 :(得分:1)

在研究我的主要答案(上图)时,我遇到了psvn的emacs。有关详细信息,请参阅此SO问题/答案:SVN for Emacs: how do you set author name and save password?

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