代码之家  ›  专栏  ›  技术社区  ›  Thomas

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

  •  7
  • Thomas  · 技术社区  · 14 年前

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

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

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

    6 回复  |  直到 14 年前
        1
  •  7
  •   Dirk is no longer here    14 年前

    你可以用 ssh-agent 发射前 emacs (或者在另一个壳里)。

        2
  •  1
  •   phils    14 年前

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

        3
  •  1
  •   sanityinc    14 年前

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

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

    (setenv "DISPLAY" nil)
    

    不过,这可能还有其他负面影响,所以也可以查看“man ssh-askpass”,以防有什么帮助。

    (免责声明:我个人使用了一个基于ssh代理的解决方案,我强烈建议这样做。)

        4
  •  1
  •   l0st3d    13 年前

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

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

    在~/.ssh/config中设置。

        5
  •  1
  •   Community rohancragg    7 年前

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

    我想您可能还希望了解psvn,但我认为关于在SSH上设置PreferredAuthentications值的方法更直接地适用于您最初提出的问题。

        6
  •  1
  •   justis    13 年前

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

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

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

    你也可以考虑在 ~/.ssh/config . 可以分别为每个主机设置选项。 Here's a page that roughly shows how ,尽管用于强制publickey auth。请注意,这将影响用户帐户的所有SSH使用,而不仅仅是CVS。这很可能是你想要的,因为你似乎更喜欢避免publickey auth。下面是您要添加的块的示例 ~/.ssh/配置 :

    Host cvs
    
      Hostname cvs.your.corp
      User yourCVSusername
      PreferredAuthentications password
    

    或者,你可以改变 Host cvs Host cvs.your.corp 如果您现有的访问方法使用FQDN,而不只是主机名。

    最后,你可以 ~/.ssh/配置 仅通过这一行(或将其添加到现有的一行中):

    PreferredAuthentications password
    

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

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