使用脚本自动加入zerotier网络
好方
好方
发布于 2023-06-07 / 15 阅读 / 0 评论 / 0 点赞

使用脚本自动加入zerotier网络

配置

Zerotier官网:ZeroTier Central

需要修改的配置,均从Zerotier官网获取

apitoken,如下

networkid,如下

clientname:准备加入zerotier网络的设备的名称

clientdescription:准备加入zerotier网络的设备的描述

auto-join-zerotier.sh脚本如下

#!/bin/bash
#set -exu

# 从官网获取api token和子网id,目前不变
apitoken="fydPNeCNcAZMSEaRPa1adhHYqrMCoklK"
networkid="b15644912ead2af7"
# 填写客户端的名字和描述
clientname="test-cloud"
clientdescription="测试"

# 检测并安装zerotier-one, curl, jq
function checkandinstall() {
    whereis curl > /dev/null 2>&1 || whereis jq > /dev/null 2>&1
    if [[ $? -ne 0 ]]; then
        echo "请先安装curl和jq" && exit 1
    fi
    systemctl status zerotier-one >/dev/null 2>&1
    if [[ $? -ne 0 ]]; then
        echo "接下来,将使用官网脚本安装zerotier-one" && sleep 2
        curl -s https://install.zerotier.com | sudo bash
        if [[ $? -eq 0 ]]; then
            echo "Zerotier-one安装成功" && return 0
        fi
    fi

}

checkandinstall

echo "申请加入网络" && /usr/sbin/zerotier-cli join $networkid > /dev/null 2>&1
if [[ $? -eq 0 ]]; then
    # 设置访问的api token
    headers="Authorization: token $apitoken"
    # 获取本机客户端id
    clientid=$(/usr/sbin/zerotier-cli info | awk '{print $3}')
    # 确认客户端id是否已认证
    authorized=$(curl -s -X GET -H "$headers" https://my.zerotier.com/api/network/$networkid/member/$clientid | jq -r ".config.authorized")

    # 如果该设备还没有经过验证,则发送验证请求
    if [[ $authorized == false ]]; then
        authorize_url="https://my.zerotier.com/api/network/$networkid/member/$clientid"
        data='{"config": {"authorized": true}, "name": "'$clientname'" , "description": "'$clientdescription'"}'
        # 对客户端进行认证
        echo "网络认证中" && curl -s -X POST -H "$headers" --data "$data" $authorize_url >/dev/null 2>&1 && echo "网络认证成功"
        # 确认客户端id是否已认证
        authorized=$(curl -s -X GET -H "$headers" https://my.zerotier.com/api/network/$networkid/member/$clientid | jq -r ".config.authorized")
        if [[ $authorized == true ]]; then
                echo "客户端已认证成功,Zerotier-one子网中所有设备信息如下"
                # 获取所有客户端信息
                curl -s -X GET -H "$headers" https://my.zerotier.com/api/network/$networkid/member | jq -r '.[] | [.nodeId, .online, .config.ipAssignments[],.name, .description] | join("\t\t")' | awk 'BEGIN{printf "%-15s\t%-15s\t%-20s%-15s%-15s\n","nodeid","online","ip","name","description"}{printf "%-15s\t%-15s\t%-20s%-15s%-15s\n", $1,$2,$3,$4,$5}'
        fi
    fi
fi

运行

bash auto-join-zerotier.sh

评论