Emacs:Tramp不起作用

jer*_*boa 41 emacs ssh tramp

我试图通过Tramp通过Emacs打开一个远程文件.

(require 'tramp)
(setq tramp-default-method "ssh")
Run Code Online (Sandbox Code Playgroud)

我收到了来自Emacs的消息

Tramp:等待来自远程shell的提示

Emacs挂了,之后没有回复任何动作

Emacs安装在Windows上; 远程文件在Linux机器上.

yPh*_*hil 66

如果您要连接的帐户使用了一些奇怪的花哨shell提示符,那么很可能这就是让流浪汉旅行的原因.

以root用户身份登录,然后输入

PS1="> "
Run Code Online (Sandbox Code Playgroud)

(这是一个正常的,标准的shell(ZSH,BASH,younameit)提示,一个tramp会理解的)然后切换到用户帐户,并启动 emacs -q(以确保你.emacs不会导致这个混乱)并试着C-x C-f /sudo:root@localhost:/etc/hosts看看是什么.

您可以(不推荐)自定义定义tramp期望的正则表达式:

M-x customize-variable RET tramp-terminal-prompt-regexp
Run Code Online (Sandbox Code Playgroud)

我的方法:

  1. 确保变量tramp-terminal-type设置为"哑"

M-x customize-variable RET tramp-terminal-type

  1. 在.*shrc中测试并提供正确的提示:
case "$TERM" in
"dumb")
    PS1="> "
    ;;
xterm*|rxvt*|eterm*|screen*)
    PS1="my fancy multi-line \n prompt > "
    ;;
*)
    PS1="> "
    ;;
esac
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!这必定是许多人的问题的根源,他们只是没有意识到这一点.修复了我认为是失败原因的Tramp错误. (5认同)
  • 我希望所有这些都能实现自动化.应自动检测远程主机的提示模式.我们如何实现这一目标? (4认同)
  • 值得注意的是,您可以自定义tramp期望的提示(Mx自定义变量"tramp-login-prompt-regexp"但我的建议更倾向于使您的提示符与tramp兼容(https://github.com/xaccrocheur) /kituu/blob/master/.bashrc)而不是相反 (2认同)

phi*_*ils 18

你的Windows ssh客户端是关键,而'ssh'Tramp方法几乎肯定是错误的.

如果你正在使用Cygwin,那么你需要使用'sshx'方法,你可能需要使用ssh-agent来处理身份验证.详细信息如下: 使用tramp与EmacsW32和cygwin,可能吗?

我想这同样适用于任何独立的ssh客户端,它不需要完整的Cygwin安装,但确实使用了Cygwin DLL.(我提到这个,因为我很确定我记得看过这样的事情.)

如果您正在使用PuTTY,那么您需要'plink'方法,正如Alex Ott指出的那样.如果Wiki不够,那么这里的搜索可能会找到配置该方法的解决方案.

我建议的其他替代方案是:

  1. 使用Cygwin原生Emacs.这将比NTEmacs慢,但Tramp似乎与'ssh'方法一起使用,并且密码提示也有效.

  2. 在Windows机器上托管Linux VM,然后在其上运行Emacs.这是一个相当大的跳跃,但它是在Windows中使用时使用Tramp的首选方式.


Ale*_*Ott 3

您检查过Emacs wiki来寻找解决方案吗?ssh是在PATHplink还建议在 MS Windows 上使用- 请参阅 TRAMP 文档中的“内联方法”部分