summaryrefslogtreecommitdiff
path: root/scripts/wireguard-new-peer.sh
blob: 28ca90ee4adaebf093ba7dbae2019b87bce5bbc9 (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
#!/bin/bash

set -euo pipefail
IFS=$'\n\t'

if [[ $# -ne 2 ]]; then
    echo "Usage: $0 <wg server config file> <desired ip for client (without CIDR)>"
    exit 1
fi

# create client keypair
cli_privkey=$(wg genkey)
cli_pubkey=$(wg pubkey <<< "$cli_privkey")

# PrivateKey = ...
# if you don't leave a space, this won't work
#srv_pubkey=$(awk -e '/PrivateKey/ { print $2; }' "$1"  | wg pubkey)
srv_pubkey=$(awk -e 'match($0, /^PrivateKey\s*=\s*(.*)$/, ar) { print ar[1]; }' "$1" | wg pubkey)
srv_port=$(awk -e 'match($0, /^ListenPort\s*=\s*(.*)$/, ar) { print ar[1]; }' "$1")

# create client config
echo "*** Scan this with your mobile phone ***"
qrencode -t ansiutf8 <<EOF
[Interface]
PrivateKey = $cli_privkey
Address = $2/24

[Peer]
PublicKey = $srv_pubkey
Endpoint = $(hostname --fqdn):${srv_port}
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 30
EOF

cat >> "$1" <<EOF

# Auto-Generated
[Peer]
PublicKey = $cli_pubkey
AllowedIPs = $2/32

EOF