ssh exit_status not 255 for many errors

Tom Brown tdbrown at
Tue May 31 21:27:14 EST 2005

Hello openssh developers,

I'm having some trouble with ssh version 3.8.1p1 but see the same
problem in the source I just pulled from
openssh at

The man page for ssh says...
     ssh exits with the exit status of the remote command or with 255
		 if an error occurred.
thus I expect ssh to always return either 255 or the exit value of the
remote command but it frequently returns other values.

I want it to return 255 when it cannot connect, for example in this
$ ssh -v -o ConnectTimeout=5 tdbrown at echo hi
OpenSSH_3.8.1p1, OpenSSL 0.9.7e 25 Oct 2004
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to [] port 22.
debug1: connect to address port 22: Connection timed out
debug1: Connecting to [] port 22.
debug1: connect to address port 22: Connection timed out
ssh: connect to host port 22: Connection timed out
$ echo $?
1  <-- Return value of ssh

The following fixes my problem

--- openssh-3.8.1p1/ssh.c       2005-05-26 13:25:16.000000000 -0700
+++ openssh-3.8.1p1.mine/ssh.c  2005-05-26 13:24:51.000000000 -0700
@@ -579,7 +579,7 @@
            original_effective_uid == 0 &&
            options.proxy_command) != 0)
-               exit(1);
+               exit(255);

         * If we successfully made the connection, load the host
         * private key

but `grep exit\( *.c` (both in 3.8.1p1 and cvs ssh.c -r1.255) reveals that
ssh frequently returns 1 instead of 255 when it has an error. Is this
considered by design or a bug? 

I only found a problem with scp incorrectly outputting 0 or >0 when
searching for "exit" in Bugzilla. Do you think any scripts that call
ssh depend on the specific >0 value it returns? I want to write a
script that can easily and reliably differentiate between when the remote
command has exit status 1 and the command not being run.

Thank you for considering my question,

Tom Brown   tdbrown at

More information about the openssh-unix-dev mailing list