I'm trying to connect to one of my internal computers (private ip) using SSH over the internet. The SSH port of that computer is not exposed so I first create a tunnel via a public resource (public ip).

ssh <public ip> -p 2022 -l root -L<private ip>:22

After that, I can create the SSH connection like this :

ssh username@ -p 2222

Is it possible to execute this with a single command ?


You could always just run the commands, one after the other:

ssh root@<public ip> -p 2022 -L<private ip>:22 && 
    ssh username@ -p 2222

To spare yourself a lot of unnecessary typing, use bash aliases. Add a line like this to your $HOME/.bashrc:

alias ssh_tunnel='ssh <public ip> -p 2022 -l root -L<private ip>:22 && ssh username@ -p 2222'

Now, open a new terminal and you can launch the tunnel and connect by running

  • Just found out that this single command works : ssh -A -t root@<public ip> ssh -A -t <private ip> . No need to do it in 2 steps apparently. – ddewaele Apr 1 '13 at 23:37
  • @ddewaele ah, makes sense, you give ssh as the command that ssh should run. Fair enough. I still recommend an alias though, saves a lot of typing. – terdon Apr 2 '13 at 1:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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