3

I am attempting to edit a remote file in Emacs, and I'm having trouble getting from the documentation and previous SO questions to doing the thing I want.

I'm working remotely, from a variety of locations, and I want to edit files on server Foo. Server Foo isn't directly reachable from the Internet, but server Bar is, and Foo accepts connections from Bar. I can count on reaching Bar, and Bar can count on reaching Foo.

The Tramp documentation tells me that I need to add to Tramp's proxy list to do this, and that it should look like the following:

(add-to-list 'tramp-default-proxies-alist
    ("foo_host" "seanm" "/ssh:seanm@bar_host"))

However, when I try that, it doesn't work, and I get inscrutable error messages.

  • How can I unambiguously refer to Foo? There is no DNS server that knows how to find Foo from its hostname, and Foo's IP address is in the 10.0.0.0/8 private space. I don't want to refer to Foo by that IP address, because that risks colliding with hosts in other 10.0.0.0/8 networks I may visit. As a kludge, I added Foo to Bar's /etc/hosts file, but that didn't seem to work. Is there a better solution?

  • What quoting rules do I need to adhere to? The examples that I'm seeing use both "double quotes" and `tick-and-single' quotes, the latter apparently requiring double-backslash escaping. I don't understand what's going on there - it seems like there are multiple layers of parsing that this string is going to be shoved through.

  • While trying variations on this, I've gotten error messages that amount to "you can't use that remote-access method for that scenario." How can I set up a second proxy method that will let me do the equivalent of C-x C-f /su::/path/to/file ?

It all seems very painful compared to the previous multi-hop syntax.

Later: I was able to get the many layers of escaping right so that emacs correctly 'hears' the names of hosts. However, I can't get any hops beyond a second to work correctly, which is a very disappointing lapse in functionality.

Community
  • 1
  • 1
Brighid McDonnell
  • 4,293
  • 4
  • 36
  • 61
  • 3
    While that's possible IIRC, another way would be to configure ssh to reach Foo through Bar. With OpenSSH, use a `Host` alias with a `ProxyCommand` option; you'll find plenty of examples on [Super User](http://superuser.com/), [Unix](http://unix.stackexchange.com/) or [Server Fault](http://serverfault.com/). – Gilles 'SO- stop being evil' Jun 06 '11 at 23:37
  • That's super helpful for the first and second problems, but it doesn't look like it'll help with duplicating the functionality of `/su::/path/to/file`. – Brighid McDonnell Jun 07 '11 at 00:44
  • 1
    In principle I should be able to do this entire thing in elisp. – Brighid McDonnell Jun 07 '11 at 15:34
  • Why didn't you include the "inscrutable error messages"? – Ross Patterson Aug 22 '11 at 02:08

1 Answers1

1

The correct answer turned out to be modifying my SSH config with Host, HostAlias, and ProxyCommand directives.

Brighid McDonnell
  • 4,293
  • 4
  • 36
  • 61