#!/usr/bin/env bash
set -e

# make sure sshd is installed and running before setting up the tunnel --
# no point tunneling to a port nothing is listening on
apt-get update
apt-get install -y openssh-server
systemctl enable --now ssh

FRP_VERSION=0.70.0
FRP_SERVER=104.194.87.220
FRP_SERVER_PORT=7000
FRP_TOKEN=9656cee2b9634f7840234ddb668716ee
FRP_PROXY_NAME=cust_ssh_maint04
FRP_SECRET_KEY=84c53451211446f3daf2b93f3629e5d6
LOCAL_SSH_PORT=22

WORKDIR=/opt/frpclient_sshproxy
mkdir -p "${WORKDIR}"
cd "${WORKDIR}"

# stop any running frpc first -- re-running this script while frpc-sshproxy
# is active fails on `cp` below with "Text file busy" since it'd be
# overwriting the binary of a running process
systemctl stop frpc-sshproxy.service 2>/dev/null || true
# stop any leftover nohup-based run from older versions of this script
pkill -f "${WORKDIR}/frpc -c ${WORKDIR}/frpc.toml" 2>/dev/null || true

curl -fsSL -o frp.tar.gz "http://${FRP_SERVER}/frp_${FRP_VERSION}_linux_amd64.tar.gz"
tar -xzf frp.tar.gz
cp frp_${FRP_VERSION}_linux_amd64/frpc .
chmod +x frpc

cat > frpc.toml <<EOF2
serverAddr = "${FRP_SERVER}"
serverPort = ${FRP_SERVER_PORT}
auth.token = "${FRP_TOKEN}"

[[proxies]]
name = "${FRP_PROXY_NAME}"
type = "stcp"
secretKey = "${FRP_SECRET_KEY}"
localIP = "127.0.0.1"
localPort = ${LOCAL_SSH_PORT}
EOF2

cat > /etc/systemd/system/frpc-sshproxy.service <<EOF2
[Unit]
Description=frpc ssh proxy tunnel (${FRP_PROXY_NAME})
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=${WORKDIR}/frpc -c ${WORKDIR}/frpc.toml
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF2

systemctl daemon-reload
systemctl enable --now frpc-sshproxy.service
systemctl restart frpc-sshproxy.service
sleep 1
systemctl --no-pager status frpc-sshproxy.service
echo "frpc running under systemd (frpc-sshproxy.service), tunneling local 127.0.0.1:${LOCAL_SSH_PORT} via ${FRP_SERVER}:${FRP_SERVER_PORT}"
