Kevin Kinsey <k...@daleco.biz> wrote:

> Greetings!
>
> In order to continue to allow them to connect to an outbound
> SMTP box on the LAN, I've done this on their server:
>
> sudo ssh -L thisbox:24:remotebox:52525 m...@remotebox

I wrote a script to get around my home firewall, it doesn't do exactly
as you want but that only requires changing the ssh bit. I call it
from cron so it stays alive, if it dies it will re-connect otherwise
it just checks a lock file.

It may be of use

David

#!/usr/bin/perl


##
## PURPOSE:
##      run reverse ssh to work
##      
##      designed to be run from crontab. creates a lock file so that
##      not more than one instance of the process is started
##


use strict; 
use warnings;


## user crontab doesn't have permission in /var for lock file
## or for ports below 1024
my $username='username';

my $hostname="hostname";
my $address=$hostname.".somewhere.com";
my $port=$ARGV[0]; #2022;

my $lckfile="/tmp/revssh.${hostname}.pid";





sub start_ssh {

    ## fork process to start ssh
    defined( my $pid=fork ) or die "cannot fork process: $!";



    ## parent - open lock file with child pid
    if($pid) {

        print "Starting process: $pid\n";

        open(LOCKFILE,">$lckfile") or die "Cannot create lock file: $!";
        print LOCKFILE "${pid}";
        close(LOCKFILE);

    } else {

        ## child - start ssh process
        exec("ssh -qnNCX -R ${port}:localhost:22 ".
             "${usernam...@${address}")
          or die "cannot exec process\n";
    }

}




## main

if(! -e $lckfile) {

    start_ssh();

} else {

    ## get running(?) pid from pid file
    @ARGV = ($lckfile);my $old_pid = <ARGV>;
    my $running = kill 0, $old_pid;


    ## lock file exists - is process still running?
    if ( $running == 1 ) {
        die "Process running: $old_pid\n";
    } else {
        ## check lockfile was deleted!
        if(! unlink $lckfile) {
              die "Lockfile not deleted\n";
          }
        print "Orphan lock file - Lock file deleted\n\t";

        start_ssh();
    }
}
_______________________________________________
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"

Reply via email to