Emacs中使用ssh配置的Tramp模式

19

我认为这是使用tramp非常基础的问题,但对我来说却不起作用。 我有一个指向我的亚马逊ec2机器的~/.ssh/config文件。

Host amazon
   Hostname xxxx.amazonaws.com
   Port yyy
   User me
   IdentityFile ~/.ssh/ubuntu
   ForwardAgent yes

我可以轻松地从终端执行ssh amazon命令,并且成功连接到Amazon EC2(所以我的配置没问题),但是在Emacs中执行以下命令:

C-x C-f /ssh1:amazon:

我总是在 Aquamacs 中遇到这个错误:

Process *tramp/ssh1 amz* exited abnormally with code 255
在Emacs中:
tramp: Opening connection at amz using ssh1...
tramp: Waiting for prompts from remote shell
tramp: Waiting 60s for prompt from remote shell
tramp-process-actions: Login failed

我还有其他的SSH配置,他们通过SSH连接到我本地虚拟机也遇到了同样的问题。

非常感谢任何帮助。


值得查看 man ssh_config - DJJ
3个回答

46

有一个值得尝试的方法是使用sshx连接方式。这使tramp尝试避免远程主机上的任何非标准shell配置。

像这样:

C-x C-f /sshx:amazon:

4
为什么ssh/sshx不会被交换,我永远无法理解。 - Jürgen A. Erhard

10
方法ssh1强制使用参数-1在ssh v1协议模式下运行ssh。ssh v1存在已知的漏洞,因此不安全。因此,许多站点禁用了ssh v1协议。

你可以通过shell命令ssh -1 me@xxxx.amazonaws.com来验证这一点。

尝试其他连接方法,例如sshsftpscpx。你可以使用C-h v tramp-methods查看所有预配置的连接方法。


谢谢你,你是对的,亚马逊不接受ssh-1,但它接受ssh-2,我仍然有同样的问题。至少现在我不再使用ssh1 :) - Matilda

6
如果Moritz Bunkus的回答没有解决问题,你可以通过以下方式配置tramp输出的详细程度:
M-x customize-variable RET tramp-verbose RET 特别地,级别6是“已发送和接收的字符串”,这可能有助于确定“等待远程shell提示”的原因是因为它没有接收到它认可的提示模式,还是由于某些更严重的故障。
如果只是收到了一个无法识别的提示,那么你可以尝试自定义变量tramp-login-prompt-regexptramp-shell-prompt-pattern
当然,如果你的ssh代理正常工作,则登录提示不应该相关。
如果你在Windows上运行Emacs,也可以参考以下问题和答案:

看起来我的emacs的tramp冗长级别是9,所以非常高。我使用ssh2运行它,然后出现如下提示: Loading tramp...done tramp: Opening connection at ssh2 using nil... tramp: Waiting for prompts from remote shell tramp: Waiting 60s for prompt from remote shell tramp-process-actions: Login failed. 还有其他想法吗? - Matilda
1
如果找不到远程提示符,则我经常遇到与在另一台计算机上运行的shell类型有关的问题。据我所知,tramp始终使用远程shell执行命令为/bin/sh。现在,/bin/sh可以是几乎任何POSIX兼容的shell的符号链接,并且当前的Debian / Ubuntu基于发行版通常使用dash而不是bash。此外,如果您使用花哨的提示符,则已知zshbash会出现问题。我的建议:1.如果/bin/sh是指向dash的符号链接,则尝试将其更改为bash。2.如果TERM变量等于dumb,则不要在RC文件中设置花哨的提示符。 - Moritz Bunkus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接