我在全屏模式下在我的Ubuntu上网本上使用GNU Emacs。当我编辑受版本控制的文件并点击C-x v v以提交最新更改时,OpenSSH弹出窗口将打开并询问我的存储库所在服务器的密码。
不幸的是,由于全屏模式,弹出窗口不会出现,我无法输入密码。但它仍然是模态的,所以我也不能回到emacs,也就是说,离开全屏模式(或做其他事情,如C-g)。我基本上被困了。
作为一个emacs用户,我发现弹出窗口的想法无论如何令人厌恶;-)所以理想情况下,我想要在迷你缓冲区中要求输入ssh密码。如何调整我的设置才能实现这一目标? (我更喜欢每次都输入我的密码,而不是在〜/ .ssh /)中存储密钥对。
答案 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值的更直接适用于您最初提出的问题。