I use a bash script which runs

/usr/bin/ssh -f -N -T -L8888: [email protected]

However, when I run the bash script, it waits.. I see the connection coming up but the script doesn't exit.. it's like it's waiting for the SSH process to finish, because when I manually kill it the bash script finishes as well.

Any ideas how to resolve this?

UPDATE: I have croned this script.. and the cron process is the one that becomes a zombie.. the actual scripts runs just fine, sorry about that, with ps -auxf I get:

root       597  0.0  0.7   2372   912 ?        Ss   Jul12   0:00 cron
root      2595  0.0  0.8   2552  1064 ?        S    02:09   0:00  \_ CRON
1001      2597  0.0  0.0      0     0 ?        Zs   02:09   0:00      \_ [sh] <defunct>
1001      2603  0.0  0.0      0     0 ?        Z    02:09   0:00      \_ [cron] <defunct>

and when I kill the ssh the defuncts disappear.. why would they become defunct?

  • Why would your cron a ssh tunnel? Once it binds to the port, it will not be able to bind to it again.
    – Warner
    Jul 13, 2010 at 14:00
  • I know, in the script I check if the tunnel is there already, if so do nothing.. if tunnel isn't there, bring it back up. This is to ensure the tunnel is always there..
    – grandnasty
    Jul 13, 2010 at 22:54

3 Answers 3


It seems you're trying to reimplement bits of autossh (apt-get install autossh).

Create a RSA key pair without a passphrase, install the public key on [email protected] and try:

autossh -f -N -L8888: [email protected]

Remove the $.

workstation:~$ /usr/bin/ssh -f -N -T -L8888: server.host.com
DSA host key for IP address '' not in list of known hosts.
workstation:~$ ps x | grep '\-f'
16170 ?        S      0:00 /usr/bin/ssh -f -N -T -L8888: server.host.com

It goes straight to the background as you detail for me. I do have a keypair setup on my test server, however.

Do you already have something listening on 8888 on your local server? Do you already have an instance in the background?


Detach ssh process from your terminal:

  1. Send it to background

    /usr/bin/ssh -f -N -T -L8888: serveradmin@$34.324.234.23 &

  2. Nohup it

    nohup /usr/bin/ssh -f -N -T -L8888: serveradmin@$34.324.234.23

  • 1
    -f forks it to the background.
    – Warner
    Jul 12, 2010 at 23:57

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .