summaryrefslogtreecommitdiff
path: root/scripts/tokssh
blob: 904efd4ab27444130868dc4aa0a2abe656151b06 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/bin/bash
set -e
function help {
    cat <<EOF
A simple wrapper to use like SSH

Usage:
    tokssh [ssh options] [user@]address [-s secret]

where

    ssh options:   options to pass to ssh process
    user:          login on remote host
    address:       either a ToxID or a hostname. ~/.tuntox/hosts is read to map
                hostname to ToxID. hostname MUST resolve to 127.0.0.1

    -s             optional secret to use to connect to tuntox server

examples:
    tokssh user@5A40C3443ABD6E1DDEE682E83F84A4D556C24C22D2230DCC141A4723C123473C171A4D9C4054
    tokssh 5A40C3443ABD6E1DDEE682E83F84A4D556C24C22D2230DCC141A4723C123473C171A4D9C4054
    tokssh -p 2222 -o ForwardAgent=yes user@5A40C3443ABD6E1DDEE682E83F84A4D556C24C22D2230DCC141A4723C123473C171A4D9C4054
    tokssh user@5A40C3443ABD6E1DDEE682E83F84A4D556C24C22D2230DCC141A4723C123473C171A4D9C4054 -s TuNToXSeCreT

files:
    ~/.tuntox/persist/

      If directory exists, then read & store a persistent secret key/TOXID within.

    ~/.tuntox/hosts

      Maps hostname to ToxID and optional secret.

      format is:

        hostname    ToxID   secret(optional)
EOF
}

strargs="'$*'"
if [ -z "${strargs##*-h*}" ] || [ -z "${strargs##*--help*}" ] ;then
    help
    exit
fi

array=( $@ )
len=${#array[@]}

if [ $len -lt 1 ]; then
    help
    exit
fi


# look for secret and remvove it from args
if [ $len -gt 2 ] && [ "${array[$len-2]}" == "-s" ]
then
    secret="${array[@]:$len-2:$len-1}"
    len=$[len-2]
fi

userhost=${array[$len-1]}
args=${array[@]:0:$len-1}

# check for user@id
arruserhost=(${userhost//@/ })
arruserhostlen=${#arruserhost[@]}

if [ $arruserhostlen -gt 1 ]
then
    # last argument is user@toxid
    user="${arruserhost[0]}@"
    toxid=${arruserhost[1]}
    hostname=$toxid
else
    # last argument is just toxid
    user=""
    toxid=$userhost
    hostname=$toxid
fi

#search toxid in ~/.tuntox/hosts and map it to toxid
if [ -f ~/.tuntox/hosts ]; then
    while read c_hostname c_toxid c_secret; do
        if [ "${c_hostname:0:1}" != "#" ] && [ "$c_hostname" == "$toxid" ]; then
            toxid="$c_toxid"
            if [ "$secret" == "" ]; then
                secret="-s $c_secret"
            fi
            break
        fi
    done < ~/.tuntox/hosts
fi

if [ -d ~/.tuntox/persist ]; then
    persist='-C ~/.tuntox/persist'
else
    persist=
fi

ssh \
    -o ProxyCommand="tuntox $persist -i $toxid -W localhost:%p $secret" \
    -o StrictHostKeyChecking=accept-new \
    -o CanonicalizeHostname=no \
    -o UpdateHostKeys=yes \
    $args \
    ${user}${hostname}