[OpenWrt-Devel] [PATCH v6] ppp: add new protocol PPPoSSH.
Yousong Zhou
yszhou4tech at gmail.com
Wed Sep 17 09:38:16 EDT 2014
This patch adds protocol support for PPP over SSH. The protocol name is
'pppossh' with the following options.
- server, SSH server name. Required
- port, SSH server port. Defaults to 22.
- sshuser, SSH login username. Required.
- identity, list of client private key files. ~/.ssh/id_{rsa,dsa} will
be used if no identity file was specified and at least one of them must
be valid for the public key authentication to proceed.
- ipaddr, local ip address to be assigned.
- peeraddr, peer ip address to be assigned.
- ssh_options, extra ssh client options.
Because the protocol script file ppp.sh will be called with $HOME set to
'/', we need to explicitly set it to the right value so that dropbear
client can read '~/known_hosts' correctly.
Signed-off-by: Yousong Zhou <yszhou4tech at gmail.com>
---
I can make this a standalone package (maybe in packages feeds) if that is more
preferable.
v5 -> v6
- Specify 'localip:peerip' directly without `ippair' variable.
v4 -> v5
- Remove `acceptunknown' option. For dropbear client `-y' option can be
used, and for OpenSSH client it's '-o StrictHostKeyChecking xx'. Both of
them can be specified through the `ssh_options'.
- Make variable `pty' local.
v3 -> v4
- Use default identity files only when no explicit key files were
specified.
- Added a new option `ssh_options' which will be added as part of ssh
client options.
- Change the type of `port' option to int.
- Change the type of `identity` option to array type.
v2 -> v3
- Change type of acceptunknown to boolean.
- Squeeze multiple calls to proto_config_add_string to one.
v1 -> v2
- Use common option names as suggested by jow and nbd.
- Default to using ~/.ssh/id_{rsa,dsa} as the identity file.
- Set $HOME to correct value for the current user instead of unset it.
package/network/services/ppp/files/ppp.sh | 54 +++++++++++++++++++++++++++++
1 file changed, 54 insertions(+)
diff --git a/package/network/services/ppp/files/ppp.sh b/package/network/services/ppp/files/ppp.sh
index f07b11f..6266cc4 100755
--- a/package/network/services/ppp/files/ppp.sh
+++ b/package/network/services/ppp/files/ppp.sh
@@ -212,10 +212,64 @@ proto_pptp_teardown() {
ppp_generic_teardown "$@"
}
+proto_pppossh_init_config() {
+ ppp_generic_init_config
+ proto_config_add_string server sshuser ipaddr peeraddr ssh_options
+ proto_config_add_string 'identity:list(string)'
+ proto_config_add_int port
+ available=1
+ no_device=1
+}
+
+proto_pppossh_setup() {
+ local config="$1"
+ local iface="$2"
+ local user="$(id -nu)"
+ local home=$(sh -c "echo ~$user")
+ local ip serv_addr errmsg
+ local opts pty
+
+ json_get_vars port sshuser identity ipaddr peeraddr ssh_options
+ json_get_var server server && {
+ for ip in $(resolveip -t 5 "$server"); do
+ ( proto_add_host_dependency "$config" "$ip" )
+ serv_addr=1
+ done
+ }
+ [ -n "$serv_addr" ] || errmsg="${errmsg}Could not resolve $server.\n"
+ [ -n "$sshuser" ] || errmsg="${errmsg}Missing sshuser option.\n"
+ [ -z "$identity" ] && identity="'$home/.ssh/id_rsa' '$home/.ssh/id_dsa'"
+ {
+ local fn
+ for fn in $identity; do
+ [ -f "$fn" ] && opts="$opts -i $fn"
+ done
+ [ -n "$opts" ] || errmsg="${errmsg}Cannot find valid identity file.\n"
+ }
+ [ -n "$errmsg" ] && {
+ echo -ne "$errmsg"
+ sleep 5
+ proto_setup_failed "$config"
+ exit 1
+ }
+ opts="$opts ${port:+-p $port}"
+ opts="$opts ${ssh_options}"
+ opts="$opts $sshuser@$server"
+ pty="env 'HOME=$home' /usr/bin/ssh $opts pppd nodetach notty noauth"
+
+ ppp_generic_setup "$config" \
+ noauth pty "$pty" "$ipaddr:$peeraddr"
+}
+
+proto_pppossh_teardown() {
+ ppp_generic_teardown "$@"
+}
+
[ -n "$INCLUDE_ONLY" ] || {
add_protocol ppp
[ -f /usr/lib/pppd/*/rp-pppoe.so ] && add_protocol pppoe
[ -f /usr/lib/pppd/*/pppoatm.so ] && add_protocol pppoa
[ -f /usr/lib/pppd/*/pptp.so ] && add_protocol pptp
+ [ -x /usr/bin/ssh ] && add_protocol pppossh
}
--
1.7.10.4
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list