Date: Tue, 10 Nov 2009 18:19:01 +0000 From: David Collins <davidcollins001@gmail.com> To: kdk@daleco.biz, freebsd-questions@freebsd.org Subject: Re: Remote ssh tunnel in background or script? Message-ID: <4af9ae95.RHunUtG9FYOTtwfD%davidcollins001@gmail.com> In-Reply-To: <4AF85FC9.10103@daleco.biz> References: <4AF85FC9.10103@daleco.biz>
next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --=_4af9ae95.IxGfVXUUHDB0EK50Rpo+FJA8sCYptram0K3B+d3MYZoRb0bR Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline Kevin Kinsey <kdk@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 me@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 --=_4af9ae95.IxGfVXUUHDB0EK50Rpo+FJA8sCYptram0K3B+d3MYZoRb0bR Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="revssh" #!/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 ". "${username}\@${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(); } } --=_4af9ae95.IxGfVXUUHDB0EK50Rpo+FJA8sCYptram0K3B+d3MYZoRb0bR--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4af9ae95.RHunUtG9FYOTtwfD%davidcollins001>