Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Let's assume the following hosts:

  • localhost : my laptop
  • remoteserver : a server with a public IP which runs a SSH server.
  • private.remoteserver : a server with a private IP which is only accessible from remoteserver.

I don't have sudo access to remoteserver, so I can't make changes with the root user.

The question is: Is it possible to access a port on private.remoteserver from remoteserver, in a single command?

I've played around a bit with ssh tunnels without luck. It would like to create an SSH alias to private.remoteserver as described in this article.

For example, I'd like to run from localhost:

curl http://private.remoteserver:8080/

to connect to port 8080 on private.remoteserver. Is this possible?

share|improve this question
up vote 3 down vote accepted

You haven't show us what you've tried so far, but something as simple as this should work:

ssh -L 8080:private.remoteserver:8080 remoteserver

Which would then let you run:

curl http://localhost:8080/

...which due to the port forwarding we just set up would actually connect to port 8080 on private.remoteserver.

If you want to be able to directly access http://private.remoteserver:8080/ from your client, you'll need to (a) set up some sort of proxy and (b) configure curl (or other software) to use the proxy. You can set up a SOCKS5 proxy with ssh using the -D option:

ssh -D 1080 remoteserver

And then you can:

curl --socks5-hostname http://private.remoteserver:8080/

Most web browsers (Firefox, Chrome) can also be configured to operate with a SOCKS5 proxy. If you search for "ssh dynamic forwarding" you'll find lots of good documentation, including this article from Ubuntu.

share|improve this answer
Thanks, the command ssh -L 18080:private.remoteserver:8080 -f -N user@remoteserver allows to me to curl on port 18080, but do is there a way to avoid to run 1 command like this (or 1 proxy per service) for each port I want to access on private.remoteserver? – David Aug 14 '13 at 13:23
Sure, that's what the dynamic proxy is all about. Take a look at the docs I linked to in the answer. – larsks Aug 14 '13 at 13:33
Yes, but I have to specify the proxy in all applications. I'd like to create an alias in /etc/hosts and get all traffic to this host fowarded through ssh tunnel. – David Aug 14 '13 at 14:46
I accept your answer, as it is valid for the question I originely asked. thanks. – David Aug 14 '13 at 14:48

Actually I solved my problem with sshuttle:

sshuttle --dns -HN -r user@remoteserver

No other proxy configuration required, then I can access any ports of the private IP :

curl http://private:8080/
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.