5

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

我尝试添加 .emacs:

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

这是我对手册内容的最佳猜测解释。然后我做:Cx Cf /ssh:machine2.abc.def.edu 或:Cx Cf /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 不能退出,必须从外壳中杀死......这里有一个 2 年的线程,有同样的问题。我已经从那里尝试过答案:

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

结果相同...也适用于我能想到的所有组合... machine1.abc.def.edu 上的远程编辑工作正常。

4

3 回答 3

10

答案是使用 ssh_config 中可用的ssh_proxy命令。记录在这里这里。基本上,您在 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将自动跳过端点 1。

于 2011-05-01T18:49:50.123 回答
4

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

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

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

  1. 它在目标主机名周围添加刻度(Emacs 正则表达式语法以避免匹配部分名称)
  2. 它仅使用目标主机中的子域名(您在下面的评论中报告说,当您使用完整域名时,您无法 ssh 到 machine2)

当您尝试访问 machine2 上的文件时,这有帮助吗?

于 2011-05-01T17:08:33.743 回答
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:"))
于 2011-05-01T12:09:32.600 回答