Sebasthian Ogalde
Sebasthian Ogalde

Reputation: 517

Editing files through multi-hop ssh in Sublime Text 3

I was wondering if it is possible to edit a file with Sublime Text 3 through multi-hop SSH tunnel. In my particular case I have my Mac (let's call it A) and two Linux Machines: B and C. The files are located in C, and I access them with my machine like this:

A -> B -> C

I found these articles that can help but they only talk about editing files in B.

How to open remote files in sublime text 3

Editing files remotely via SSH on SublimeText 3

According to these articles, I can edit files in B installing rsub in the remote machine and a plugin in Sublime at A. I tried to do that in C (yes, i know it is not so useful, but who knows) but I got the error:

user@remote-C:~$ rsub
/usr/local/bin/rsub: connect: Connection refused
/usr/local/bin/rsub: line 327: /dev/tcp/localhost/52698: Connection refused
Unable to connect to TextMate on localhost:52698

I would be happy to know if there is a way to achieve this. Thanks in advance.

Upvotes: 2

Views: 3494

Answers (2)

Watista
Watista

Reputation: 11

The accepted solution didn't work for me because I use Host B as a SSH server where my SSH keys are stored. Also my SSH keys have passwords so the ProxyCommand command won't work.

But There's an easier way to do this.

You can add the following to the .ssh/config file on Host B;

Host *
RemoteForward 52698 localhost:52698

You can define a specific host or give the * wildcard for all hosts. This will forward port 52698 for all SSH sessions from Host B.

Upvotes: 1

Sebasthian Ogalde
Sebasthian Ogalde

Reputation: 517

I will answer to myself. The solution is to do a SSH tunnelling from A to C with B in between using the ProxyCommand in the ssh config file at ~/.ssh/config.

I added these lines:

Host myMachineC
    HostName NAME_OF_MACHINE_C
    ProxyCommand  ssh USER_IN_B@NAME_OF_MACHINE_B nc %h %p
    User USER_IN_C
    RemoteForward 52698 localhost:52698 # this is required by rsub

Host defines an alias for the real hostname which is written after the HostName directive. ProxyCommand is a command that is executed when you try to log in myMachineC. nc is a command that...

...by default creates a TCP socket either in listening mode (server socket) or a socket that is used in order to connect to a server (client mode) [1]

Now the machine C is accessible from A by only typing:

$ ssh myMachineC

It is recommendable that you already allowed password-less logins. To achieve this you need to have installed the public key from your home computer into the ~/.ssh/authorized_keys of each host along the way. [2]

In conclusion: With all this procedure, there will be a normal SSH connection to the intermediary machine B and then nc will be used to extend the connection to C. Using this tunnelling, the client can act as if the connection were direct using ssh. That will be useful to use with rsub.

Then, you should install and use rsub as normal and it will work like a charm.

I tried this in OSX Yosemite, but should run in almost any *nix system. I hope it will be useful for you.

Netcat Explanation and Examples

Transparent Multihop in SSH

Upvotes: 3

Related Questions