Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

If I do a remote port forward, a la -R 3690:localhost:3690 when a binding already exists on the port on the remote host, I get this warning:

Warning: remote port forwarding failed for listen port 3690

Is there a way to have ssh fail (i.e. exit with a nonzero return code), rather than just emit a warning?

share|improve this question
    
Do you actually need to make a terminal channel as well, or just the forwarding? –  Ignacio Vazquez-Abrams Oct 31 '11 at 1:16
    
@IgnacioVazquez-Abrams: Just the forwarding. –  Matt Joiner Nov 7 '11 at 23:37

2 Answers 2

up vote 17 down vote accepted

Run

ssh -o "ExitOnForwardFailure yes" ...

or put

ExitOnForwardFailure yes

into ~/.ssh/config. See ssh_config(1) using man for details.

share|improve this answer
    
Unfortunately I have OpenSSH 4. Can you tell me when this feature was added? –  Matt Joiner Nov 1 '11 at 1:14
    
No, I don't know that. It may be a version 5 feature. But version 4 must be many years old now, and there are security fixes all the time. If you can't upgrade the server yourself, you may want to ask your server admin if s/he thinks it's safe to keep using that version. –  Andrew Schulman Nov 1 '11 at 6:23

I use bash script on the target host to make sure the forwarding was opened correctly. The SSH connection will run this and exit if there's a problem with the port forwarding, e.g.

client side script: ( this uses .ssh/config for port forwarding settings )

#!/bin/bash    

while true; do
    echo -n starting at : "
    date
    ssh user@server bin/sshloop.sh
    echo "got back, sleeping 17 "
    sleep 17
done 

server side script ( bin/sshloop.sh )

#!/bin/bash

while true; do 
  echo $(date)" : SSH Reverse 1090:80, 1232:22 From Server to Client"
  sleep 17
  if ! netstat -an | grep -q ":::1090 " ; then
     echo "1090 forward missing, bailing out"
     exit
  fi
done

Maybe even run the client side script under screen with -dmS

share|improve this answer
1  
The case I'm trying to avoid is that a port forward already exists, and a warning is given. I think this script will treat an existing binding to the port as success, rather than failure. –  Matt Joiner Nov 4 '11 at 11:43
    
This is true. My problem was with the same script holding the port open for a few minutes before timing out. Thsi script would exit and rerun a few times after which the port would be open again. If you need to know for sure who owns the port you could try running netstat -anp with sudo and grepping that. –  anttir Nov 7 '11 at 17:28

Your Answer

 
discard

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.