← Back to team overview

sslug-teknik team mailing list archive

Hvorfor afbrydes ssh-forbindelse under boot, men ikke under manuel oprettelse?

 

God dag,

for at få adgang til internettet skal jeg logge på vores kollegies 
firewall med ssh. Dertil kan man benytte et expect-script som vist 
herunder.
Jeg vil gerne have at min computer automatisk logger på firewallen når 
den booter. Derfor har jeg tilføjet boot-scriptet /etc/init.d/
k-net-fw som vist herunder.

Når det afvikles under boot er der kortvarig forbindelse til 
internettet igennem firewallen. Det kan jeg se fordi xntpd få 
sekunder senere kan hente dato og tid fra TDCs tidsserver.
Men når jeg efter afsluttet boot, som bruger logger ind og prøver at 
surfe på internettet, er der ingen internetforbindelse. 
ssh-forbindelsen til firewallen er væk, og expect-scriptet er 
stoppet. Jeg er nødt til manuelt at afvikle /etc/init.d/k-net-fw før 
jeg kan komme på internettet. Kun når jeg afvikler /etc/init.d/
k-net-fw manuelt forbliver expect-scriptet kørende, og 
ssh-forbindelsen forbliver oppe.

Spørgsmål:
Hvorfor bliver forbindelsen til firewallen afbrudt efter /etc/init.d/
k-net-fw afvikles under boot, men ikke efter det afvikles manuelt?

Jeg er blank.
Er der nogen der kan hjælpe?

Hilsen Johnny :o)

--- /etc/init.d/rc5.d/S12k-nte-fw (link til /etc/init.d/k-net-fw ---

#! /bin/sh
/home/johnny/Programs/k-login_v0.1-j.sh mitbrugernavn fw1.k-net.dk < /
home/johnny/Programs/k-net-passwordfile.txt
/home/johnny/Programs/k-login_v0.1-j.sh mitbrugernavn fw2.k-net.dk < /
home/johnny/Programs/k-net-passwordfile.txt

--- k-login_v0.1-j.sh ---

#!/usr/bin/expect -f
#Written by Steffen M. Hansen,  steffen a zervus.dk
#This script can be used to login to K-net's new firewall(6.2004). It
# will reopen the connection if the firewall logs you out.
#
# Time-stamp: <2004-06-20 12:42:03 zervus>
# $Id: k-login.sh,v 1.2 2004/06/20 10:42:50 zervus Exp $
set numargs [llength $argv]
if {$numargs != 2} {
    send_user "Error: Expected 2 arguments got $numargs\n"
    send_user "Usage: k-login.sh username firewallhost < passwordfile
\n"
    send_user "\nusername: your K-net username\n"
    send_user "firewallhost: the firewall to login to. \n\t(eg. 
fw1.k-net.dk or fw2.k-net.dk)\n"
    send_user "passwordfile: The program reads the password from 
stdin. \n\t You can put the password in a file and redirect it to 
this program. \n\t This prevents the password from showing up in the 
process list\n"
    exit
}
set username [lindex $argv 0]
#host: firewall to login to. (fw1.k-net.dk or fw2.k-net.dk)
set host [lindex $argv 1]
set password [read -nonewline stdin ]

proc touser {str} {
    send_user "[clock format [clock seconds]]: $str"
}

#sleeptime:  number of seconds to wait between 2 ssh login attempts
set sleeptime 30

log_user 0 ;#do not echo output from ssh
while {1} {
    sleep 2 ;#wait for 2 sec between two ssh connects.
    set timeout $sleeptime
    spawn -noecho ssh -T -l $username $host
    touser "Connecting to $host\n"
    expect {
	password: {
	    send  "$password\r"
	    touser "Connected to $host (password sent)\n"
	    expect {
		"ind!" {
		    touser "Login successful: \
			User $username logged in on $host\n"
		    #we are now logged in and only need to do anything

##		    #Continue running the script in the background.
		    if {[fork]!=0} exit
		    disconnect

		    # if the connection is closed.
		    set timeout -1
		    expect eof {
			touser "Connection closed by remote host\n"
			exp_wait;continue
		    }
		} "Permission denied, please try again." {
		    touser "Login failed: Username or password incorrect!  \
			<-- Notice!!!\n"
		    exp_close;exp_wait
		    touser "Connection closed\n"
		    touser "Exiting program\n"
		    exit
		} timeout {
		    touser "Login failed: \
			Timeout waiting for remote host to confirm\n"
		    close;wait
		    touser "Connection closed\n"
		    continue
		} eof {
		    touser "got end of file exiting\n";
		    wait;continue
		}
	    } ;# expect ind!
	} eof {
	    touser "Connection failed: \
		Remote host($host) closed connection\n";
	    wait;continue
	} timeout {
	    touser "Connection failed: \
		Timeout waiting for remote host($host)\n";
	    close;wait;continue
	}
    } ;#expect password
    exit
} ;#while

exit



Follow ups