Emacs Tramp ssh双跳

时间:2011-05-01 10:23:40

标签: emacs ssh tramp

有人可以帮我设置Emacs Tramp做双跳吗? 我想在machine2.abc.def.edu上工作,我只能通过machine1.abc.def.edu连接到它。我的用户名是myname,在两台机器上都是。

我试图添加.emacs:

(add-to-list 'tramp-default-proxies-alist
          '("\\`machine2\\.abc\\.def\\.edu\\'"
            "\\`myname\\'"
            "/ssh:machine1\\.abc\\.def\\.edu:"))

这是我对手册中内容的最佳猜测。然后我做: C-x C-f /ssh:machine2.abc.def.edu 要么: C-x C-f /ssh:rsuhada@machine2.abc.def.edu

但两人都给出了:

ssh: Could not resolve hostname ssh: nodename nor servname provided, or not known
Process *tramp/scpc ssh* exited abnormally with code 255

我的Aquamacs不能退出,不得不从贝壳中杀死......这里有两年的线索同样的问题。我从那里尝试了答案:

(add-to-list 'tramp-default-proxies-alist
          '("machine2.abc.def.edu"
            nil
            "/ssh:myname@machine1.abc.def.edu:"))

同样的结果......对于我可以提出的所有组合......在machine1.abc.def.edu上进行远程编辑工作正常。

3 个答案:

答案 0 :(得分:10)

使用ssh_config中可用的ssh_proxy命令的答案。记录herehere。基本上,您在ssh文件夹中创建一个配置文件,您可以在其中编写快捷方式。您的一个快捷方式是通过另一个端点使用代理。所有快捷方式都适用于使用ssh的任何工具,包括git和emacs。

Host endpoint2
     User myusername
     HostName mysite.com
     Port 3000
     ProxyCommand ssh endpoint1 nc -w300 %h %p

Host endpoint1
     User somename
     HostName otherdomainorip.com
     Port 6893

在此示例中,运行ssh endpoint2将自动跳过endpoint1。

答案 1 :(得分:4)

好吧,让我们尝试不同的东西,不用打开隧道。 .emacs文件中的以下内容如何:

(add-to-list 'tramp-default-proxies-alist 
             '("\\`machine2\\'" 
               nil 
               "/ssh:%u@machine1.abc.def.edu:"))

这与您在论坛帖子中找到的代码有两点不同:

  1. 它在目标主机周围添加了刻度 name(要避免的Emacs regexp语法) 匹配部分名称)
  2. 仅使用 目标中的子域名 主持人(你在评论中报道了 下面你不能ssh machine2当你使用完整的 域名)
  3. 当您尝试访问machine2上的文件时,这会有帮助吗?

答案 2 :(得分:2)

设置从machine1到machine2的ssh隧道(假设sshd在machine2上的端口22上运行):

machine1.abc.def.edu> ssh -f -N -L 2222:localhost:22 machine2.abc.def.edu

然后从Emacs连接到machine2,如下所示:

/ssh:machine1.abc.def.edu#2222

或将以下行添加到.emacs:

(add-to-list 'tramp-default-proxies-alist
             '("\\`machine2\\.abc\\.def\\.edu\\'" nil
               "/tunnel:machine1.abc.def.edu#2222:"))