SSH port-forwarding from within the Google Cloud Shell

Google provides a very useful tool especially for those I’m calling “cloud workers”: the Cloud Shell. This gives you access to a linux-shell for just whatever you do usually in a linux shell - directly from your browser.

From time to time I use the cloud shell as a starting-point to connect via ssh to other systems. Recently I noticed that tcp-port-forwarding via the outgoing ssh-connections doesn’t work out of the box: When trying to establish a port-forwarding (ssh user@targethost -L 8080:127.0.0.1:8080) the following error occurs:

bind: Cannot assign requested address

… and the port-forwarding doesn’t work.

The reason for this is simple - as always as you know it: The ssh-client tries to bind to the local ipv6-port. This is not supported in the cloud shell and therefore fails.

Solving the problem

To change this behavior, you can add the commandline-switch “-4” to force ssh to only use ipv4-sockets. If you change the above command-line to

ssh user@targethost -L 8080:127.0.0.1:8080 -4

the port-forwarding works as expected.

In case you want to disable ipv6 for all outgoing ssh-connections from Google cloud shell, simple add the following configuration to your ssh-config:

~/.ssh/config

Host *
    AddressFamily inet
  You've got questions? Challenge me! Ask Robert!