tags:

views:

57

answers:

2

I need to do some work on a server to which I don't have direct access to. I do have access to my company network (via vpn). If I were on that network, I could access the server directly. But, for some reason when I'm on the vpn, I can't access the server directly.

So, I need to ssh into an intermediary ubuntu box, and then create an ssh tunnel from that box to the server.

Then, I can do my work on my laptop and send it through a local tunnel that points to a foreign tunnel (on my ubuntu box) that goes to the server.

But I don't know how to do a tunnel that creates another tunnel to a third server.

Any ideas?

Thanks, Scott

A: 

It's just a double port forward. Forward the ports from the PC to the ubuntu box, then on the ubuntu box forward those destination ports to the final endpoint. It's been a while since I've done command line ssh (been trapped in windows hell :)), so I can't give the command line you need. Another possibility is to use the SOCKS proxy ability built into SSH.

Jim Nutt
A: 

What are you trying to achieve? If you just want to get to a shell on the server then ssh into the Ubuntu box and then ssh from there to the server.

If you want to access some other network resource on the server then you want to forward a port from the server (where you can't get to it) to the Ubuntu box (where you can). Take a look at the -L option in ssh.

Edit:

Copying files to the server:

tar c path/* | ssh ubuntuName 'ssh serverName "tar x"'

Copying stuff back:

ssh ubuntuName 'ssh serverName "tar c path/*"' | tar x

Obviously you need to change ubuntuName, serverName and path/* to what you want. To use rsync you need the -E option and the same trick of wrapping one ssh command inside another. After reading your comment I'd say that the most general answer to your question is that the trick is making ssh execute a command on the target machine. You do this by specifying the command as an argument after the machine name. If you use ssh as the target command for ssh to execute then you get the two-hop behaviour that you are looking for. Then it is just a matter of playing with quotes until everything is escaped correctly.

Amoss
I need to transfer files from my laptop to the server using an intermediary.
Scott
There are a bunch of methods, probably the most adaptable way is to use rysnc with a custom shell command that logs into both systems. The easiest way is to use tar. I'll chuck an example in the answer.
Amoss