1 #!/bin/sh /etc/rc.common
6 PIDFILE
="/tmp/run/sshtunnel"
11 config_get user
$1 user
12 config_get hostname
$1 hostname
13 config_get debuglevel
$1 debuglevel
"0"
14 config_get retrydelay
$1 retrydelay
"10"
15 config_get CheckHostIP
$1 CheckHostIP
16 config_get Compression
$1 Compression
17 config_get CompressionLevel
$1 CompressionLevel
18 config_get IdentityFile
$1 IdentityFile
19 config_get LogLevel
$1 LogLevel
20 config_get ServerAliveCountMax
$1 ServerAliveCountMax
21 config_get ServerAliveInterval
$1 ServerAliveInterval
22 config_get StrictHostKeyChecking
$1 StrictHostKeyChecking
23 config_get TCPKeepAlive
$1 TCPKeepAlive
24 config_get VerifyHostKeyDNS
$1 VerifyHostKeyDNS
27 [ -n "$user" ] || error
="user is not set"
28 [ -n "$hostname" ] || error
="${error:+$error; }hostname is not set"
29 [ "$retrydelay" -ge 0 ] || error
="${error:+$error; }retrydelay must be a positive integer"
30 #[ -f "$IdentityFile" ] || error="${error:+$error; }IdentityFile $IdentityFile not accessible"
31 #add validation for the rest of the parameters
32 [ -n "$error" ] && { logger
-p user.err
-t "sshtunnel" "tunnels to $server not started - $error"; return; }
36 config_foreach load_tunnel tunnelR
&& config_foreach load_tunnel tunnelL
37 [ -n "$error" ] && { logger
-p user.err
-t "sshtunnel" "tunnels to $server not started - $error"; return; }
38 [ "$count" -eq 0 ] && { logger
-p user.err
-t "sshtunnel" "tunnels to $server not started - no tunnels defined"; return; }
40 cmd
="${CheckHostIP:+-o CheckHostIP=$CheckHostIP }"
41 cmd
="$cmd${CheckHostIP:+-o CheckHostIP=$CheckHostIP }"
42 cmd
="$cmd${Compression:+-o Compression=$Compression }"
43 cmd
="$cmd${CompressionLevel:+-o CompressionLevel=$CompressionLevel }"
44 cmd
="$cmd${IdentityFile:+-o IdentityFile=$IdentityFile }"
45 cmd
="$cmd${LogLevel:+-o LogLevel=$LogLevel }"
46 cmd
="$cmd${ServerAliveCountMax:+-o ServerAliveCountMax=$ServerAliveCountMax }"
47 cmd
="$cmd${ServerAliveInterval:+-o ServerAliveInterval=$ServerAliveInterval }"
48 cmd
="$cmd${StrictHostKeyChecking:+-o StrictHostKeyChecking=$StrictHostKeyChecking }"
49 cmd
="$cmd${TCPKeepAlive:+-o TCPKeepAlive=$TCPKeepAlive }"
50 cmd
="$cmd${VerifyHostKeyDNS:+-o VerifyHostKeyDNS=$VerifyHostKeyDNS }"
51 cmd
="$cmd""-o ExitOnForwardFailure=yes -o BatchMode=yes -nN $tunnels_cmd $user@$hostname"
53 /usr
/bin
/sshtunnel.sh
"$cmd" "$retrydelay" "$server" &
54 echo $
! >> "$PIDFILE".pids
55 logger
-p user.info
-t "sshtunnel" "started tunnels to $server (pid=$!;retrydelay=$retrydelay)"
59 config_get section_server
$1 server
60 [ "$server" = "$section_server" ] ||
return 0 # continue to read next section if this is not for the current server
61 let count
++ # count nr of valid sections to make sure there are at least one
63 config_get remoteport
$1 remoteport
64 config_get localport
$1 localport
65 [ "$cfgtype" = "tunnelL" ] && {
66 config_get localaddress
$1 localaddress
"*"
67 config_get remoteaddress
$1 remoteaddress
69 [ "$cfgtype" = "tunnelR" ] && {
70 config_get localaddress
$1 localaddress
71 config_get remoteaddress
$1 remoteaddress
"*"
74 [ "$remoteport" -gt 0 ] || error
="remoteport must be a positive integer"
75 [ "$localport" -gt 0 ] || error
="${error:+$error; }localpost must be a positive integer"
76 [ -n "$error" ] && return 1
78 [ "$cfgtype" = "tunnelL" ] && {
79 tunnels_cmd
="${tunnels_cmd:+$tunnels_cmd }-L $localaddress:$localport:$remoteaddress:$remoteport"
81 [ "$cfgtype" = "tunnelR" ] && {
82 tunnels_cmd
="${tunnels_cmd:+$tunnels_cmd }-R $remoteaddress:$remoteport:$localaddress:$localport"
87 if [ -f "$PIDFILE".pids
]
89 logger
-p user.info
-t "sshtunnel" "stopping all tunnels"
93 start-stop-daemon
-K -p "$PIDFILE"_
"$pid".pid
95 logger
-p daemon.info
-t "sshtunnel[$pid]" "tunnel stopped"
96 rm "$PIDFILE"_
"$pid".pid
97 done < "$PIDFILE".pids
101 logger
-p user.info
-t "sshtunnel" "all tunnels stopped"
103 logger
-p user.info
-t "sshtunnel" "no tunnels running"
108 [ -f "$PIDFILE".pids
] && stop
110 config_load sshtunnel
111 if [ -n "$(uci show sshtunnel.@server[0])" ] # at least one server section exists
113 logger
-p user.info
-t "sshtunnel" "starting all tunnels"
114 config_foreach load_server server
115 logger
-p user.info
-t "sshtunnel" "all tunnels started"
117 logger
-p user.info
-t "sshtunnel" "no servers defined"