Hello ! Like Edmund EVANS reported openssh-2.1.1p4 won't fork to background when using protocol 2. I managed to hack a little patch that might work ... What is the -N command line option supposed to do ? I gather it should work only with protocol2 and without any command to run on the server (and with some port forwardings ??) Anyway in the patch I put some code to check that -N is used with port forwards (and if used -f user doesn't have enter command). (If my assumptions about what -N is supposed to do are way off just rip out the unnecessary code from the patch). Also there seems to be a incompatibility issue with commercial ssh-2.2.0 and openssh when openssh client uses -N. If I press enter on the openssh client then the commercial server sends "Window overflow received channel data." and disconnects. This doesn't happen when both the client and server are openssh. Cheers, -Jarno PS. I haven't done much testing with the patch so it'll propably break something. It works now for 'ssh -f -n -N -L5000:server:110 server' and fetchmail. Patch: diff -u -r openssh-2.1.1p4/ssh.c openssh-2.1.1p4-ruined/ssh.c --- openssh-2.1.1p4/ssh.c Sat Jul 15 07:14:17 2000 +++ openssh-2.1.1p4-ruined/ssh.c Fri Aug 4 20:54:10 2000 @@ -460,10 +460,6 @@ } } - /* Cannot fork to background if no command. */ - if (fork_after_authentication_flag && buffer_len(&command) == 0) - fatal("Cannot fork into background without a command to execute."); - /* Allocate a tty by default if no command specified. */ if (buffer_len(&command) == 0) tty_flag = 1; @@ -511,6 +507,29 @@ /* reinit */ log_init(av[0], options.log_level, SYSLOG_FACILITY_USER, 0); + /* -N option only makes sense with protocol 2. It doesn't make sense + without port forwarding ?????? + */ + if ( options.num_local_forwards == 0 && options.num_remote_forwards == 0 && + no_shell_flag ) { + fprintf(stderr, "-N makes sense only with port forwardings\n"); + usage(); + /* NOT REACHED */ + } + if ((options.protocol & SSH_PROTO_2) && no_shell_flag && + buffer_len(&command) > 0) { + fprintf(stderr,"-N option works only with protocol version 2 and w/out a command\n"); + usage(); + /* NOT REACHED */ + } + + /* Cannot fork to background if no command. + Command not needed for protocol 2 & -N + */ + if ((options.protocol & SSH_PROTO_1) && !(options.protocol & SSH_PROTO_2) && + fork_after_authentication_flag && buffer_len(&command) == 0) + fatal("Cannot fork into background without a command to execute."); + /* check if RSA support exists */ if ((options.protocol & SSH_PROTO_1) && rsa_alive() == 0) { @@ -979,6 +998,12 @@ channel_open(id); channel_register_callback(id, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, client_init, (void *)0); + + /* Jarno: hack to get -f working with protocol 2 */ + if (fork_after_authentication_flag) { + if (daemon(1, 1) < 0) + fatal("daemon() failed: %.200s", strerror(errno)); + } return client_loop(tty_flag, tty_flag ? options.escape_char : -1); } -- Jarno Huuskonen - System Administrator | Jarno.Huuskonen at uku.fi University of Kuopio - Computer Center | Work: +358 17 162822 PL 1627, 70211 Kuopio, Finland | Mobile: +358 40 5388169