# prerequisiti: # avere una chiave gpg da usare per crittografare il proprio portachiavi gopass... # install gopass via asdf asdf plugin add gopass asdf install gopass 1.15.5 asdf global gopass 1.15.5 # creazione portachiavi gopass gopass setup # seguire il wizard per creare il proprio portachiavi # in alternativa è possibile usare "gopass init" # per dettagli su differenze o per usare keystore in posizioni diverse dal default # consultare la guida di gopass: https://github.com/gopasspw/gopass # aggiunta dei 2 token TOTP per le vpn: # dovete avere entrambe le url complete che iniziano con "otpauth://totp..." ed aggiungerle a gopass con: gopass insert ALL1 otpauth gopass insert ALL2 otpauth # in questo modo potrete ottenere i vostri TOTP con i comandi: gopass totp -o ALL1 gopass totp -o ALL2 # setup pritunl: # il client da console è in: /Applications/Pritunl.app/Contents/Resources/pritunl-client # ma se lo lanciate con "/Applications/Pritunl.app/Contents/Resources/pritunl-client list" NON rileverà i profili importati da gui... # soluzione? Rimuovere i profili dalla gui e reimportarli dalla console, in questo modo li avrete in entrambi correttamente # dovete avere i file "tar" originari (NON scompattateli), ed usare questa sintassi per importare entrambi quelli ricevuti: /Applications/Pritunl.app/Contents/Resources/pritunl-client add profilo.tar # di default i profili hanno impostato autostart, va disattivato su tutti, dato che va in conflitto con la gestione degli OTP for ID in $(/Applications/Pritunl.app/Contents/Resources/pritunl-client list -j | jq -r ".[] | .id"); do /Applications/Pritunl.app/Contents/Resources/pritunl-client disable "$ID"; done /Applications/Pritunl.app/Contents/Resources/pritunl-client list # il precedente comando dovrebbe ora riportare entrambi i profili con autostart disabled # lo stesso comando vi darà anche gli ID da usare per connettervi in vpn da cli # collegamento automatico vpn: #!/usr/bin/env bash if [ ! -x "$(command -v /Applications/Pritunl.app/Contents/Resources/pritunl-client)" ]; then echo "pritunl-client is not installed or not executable" exit 1 fi CONNECTED="false" for PROFILE in ALL1 ALL2; do [ "$CONNECTED" == "true" ] && break ID=$(/Applications/Pritunl.app/Contents/Resources/pritunl-client list -j | jq -r --arg PROFILE "$PROFILE" '.[] | select(.name | contains($PROFILE)) | .id') OTP=$(gopass totp -o "$PROFILE") /Applications/Pritunl.app/Contents/Resources/pritunl-client start "$ID" -p "$OTP" LOCAL_IP=$(/Applications/Pritunl.app/Contents/Resources/pritunl-client list -j | jq -r '.[] | select(.run_state=="Active") | .client_address') ATTEMPTS=5 ATTEMPT=0 while [ "$LOCAL_IP" == "" ] && [ $ATTEMPT -lt $ATTEMPTS ]; do ATTEMPT=$((ATTEMPT + 1)) echo "Trying to connect to profile: $PROFILE - attempt $ATTEMPT/$ATTEMPTS" LOCAL_IP=$(/Applications/Pritunl.app/Contents/Resources/pritunl-client list -j | jq -r '.[] | select(.run_state=="Active") | .client_address') sleep 1 done if [ "$LOCAL_IP" != "" ]; then echo "Connected to: \"$PROFILE\" profile, with ip: $LOCAL_IP" CONNECTED="true" else /Applications/Pritunl.app/Contents/Resources/pritunl-client stop "$ID" echo "Connection to \"$PROFILE\" profile failed" fi done