From 2de91ed77b7bd0bd5a7911b88f0a84dd192f39f2 Mon Sep 17 00:00:00 2001 From: Chris Date: Sat, 14 Mar 2026 19:15:38 +0000 Subject: [PATCH] Improving scripts --- .local/bin/station-install/install.sh | 22 +++-- .../bin/station-install/password-manager.sh | 49 +++++------ .local/bin/station-install/server.sh | 82 +++++-------------- .local/bin/station-install/ssh.sh | 27 +++--- 4 files changed, 76 insertions(+), 104 deletions(-) diff --git a/.local/bin/station-install/install.sh b/.local/bin/station-install/install.sh index 8eb123f..e8661fe 100755 --- a/.local/bin/station-install/install.sh +++ b/.local/bin/station-install/install.sh @@ -9,9 +9,19 @@ echo """ """ -"$HOME/.local/bin/install/password.sh" -"$HOME/.local/bin/install/password-manager.sh" -"$HOME/.local/bin/install/ssh.sh" -"$HOME/.local/bin/install/server.sh" -"$HOME/.local/bin/install/firefox.sh" -"$HOME/.local/bin/install/nextcloud.sh" +export MASTERPW=$(gum input --header="Enpass Master password" --password) + +"$HOME/.local/bin/station-install/password.sh" +"$HOME/.local/bin/station-install/password-manager.sh" + +CHECKPW=$(enpass-cli -vault="$HOME/.local/share/Enpass/Enpass/Vaults/primary" -sort list 2>&1) + +while [[ "$CHECKPW" == *level=error* ]]; do + export MASTERPW=$(gum input --header="Enpass Master password (incorrect, try again)" --password) + CHECKPW=$(enpass-cli -vault="$VAULT_DIR" -sort list) +done + +"$HOME/.local/bin/station-install/ssh.sh" +"$HOME/.local/bin/station-install/server.sh" +# "$HOME/.local/bin/station-install/firefox.sh" +# "$HOME/.local/bin/station-install/nextcloud.sh" diff --git a/.local/bin/station-install/password-manager.sh b/.local/bin/station-install/password-manager.sh index a35fa0e..5d94fa5 100755 --- a/.local/bin/station-install/password-manager.sh +++ b/.local/bin/station-install/password-manager.sh @@ -4,38 +4,39 @@ echo "-------------------------------------" echo "Enpass Setup Script" echo "-------------------------------------" -export MASTERPW=$(gum input --header="Enpass Master password" --password) +if [[ -z $MASTERPW ]]; then + export MASTERPW=$(gum input --header="Enpass Master password" --password) +fi -echo "stofflees@gmail.com" | wl-copy +VAULT_DIR="$HOME/.local/share/Enpass/Enpass/Vaults/primary" -station-launch-password-manager +if [ -f "$VAULT_DIR/vault.enpassdb" ]; then + echo "Vault already exists, skipping Enpass setup." +else + echo -n "stofflees@gmail.com" | wl-copy -zenity --title="Enpass Setup" \ - --info \ - --text="Email copied.\nPress OK when it asks for webdav URL" \ - || gum confirm "You closed the dialog, do you want to continue?" \ - || exit 1 + station-launch-password-manager -echo "https://tower.scarif.space" | wl-copy + zenity --title="Enpass Setup" \ + --info \ + --text="Email copied.\nPress OK when it asks for webdav URL" \ + || gum confirm "You closed the dialog, do you want to continue?" \ + || exit 1 -zenity --title="Enpass Setup" \ - --info \ - --text="Tower URL copied.\nPress OK when it asks for master password" \ - || gum confirm "You closed the dialog, do you want to continue?" \ - || exit 1 + echo -n "https://tower.scarif.space" | wl-copy -echo "$MASTERPW" | wl-copy + zenity --title="Enpass Setup" \ + --info \ + --text="Tower URL copied.\nPress OK when it asks for master password" \ + || gum confirm "You closed the dialog, do you want to continue?" \ + || exit 1 -read -n 1 -r -s -p $'Press enter when you have synced enpass...\n' + echo -n "$MASTERPW" | wl-copy -wl-copy --clear + read -n 1 -r -s -p $'Press enter when you have synced enpass...\n' -CHECKPW=$(enpass-cli -vault="$HOME/.local/share/Enpass/Enpass/Vaults/primary" -sort list 2>&1) + wl-copy --clear -while [[ "$CHECKPW" == *level=fatal* ]]; do - export MASTERPW=$(gum input --header="Enpass Master password (incorrect, try again)" --password") - CHECKPW=$(enpass-cli -vault="$HOME/.local/share/Enpass/Enpass/Vaults/primary" -sort list) -done - -echo "Password set successfuly" + echo "Enpass setup complete." +fi diff --git a/.local/bin/station-install/server.sh b/.local/bin/station-install/server.sh index 17f8eec..6abb9e9 100755 --- a/.local/bin/station-install/server.sh +++ b/.local/bin/station-install/server.sh @@ -5,80 +5,36 @@ echo "Server Setup Script" echo "-------------------------------------" echo "Extracting login details from enpass" -SCARIF=$(enpass-cli -vault="$HOME/Documents/Enpass/Vaults/primary" -sort show "Scarif space" 2>&1) -LABSUN=$(echo "$LABS" | grep -Po "(?<=Admin login: )\w+") -LABSPW=$(enpass-cli -vault="$HOME/Documents/Enpass/Vaults/primary" -sort pass "Scarif: Labs") +SERVER=$(enpass-cli -vault="$HOME/.local/share/Enpass/Enpass/Vaults/primary" -json -sort show "Scarif space" 'select(.label=="New new admin password")') +SERVERUN=$(echo "$LABS" | jq -r '.[].login') +SERVERPW=$(echo "$LABS" | jq -r '.[].password') SSHPATH="$HOME/.ssh/id_ed25519" # The path to the SSH key file -TITLE="$USER@$(cat /etc/hostname)" # The title for the SSH key +SERVERIP="scarif.space" +SERVERPORT=629 -echo "---" +echo "~~~~~~~~" echo "Generating the SSH key if it does not exist" [ ! -f $SSHPATH ] && ssh-keygen -t ed25519 -f "$SSHPATH" -N "" -q KEY=$(cat "$SSHPATH.pub") -# A method to generate the parameters for creating an SSH key on gitea -generate_post_data() { - cat <> ~/.ssh/known_hosts echo "~~~~~~~~" -echo "Checking if the key exists on the server" -if [[ $KEY_EXISTS == true ]]; then - echo "Found keys with the same title as this machine." - # Extract the ids of the keys with the same title as this machine - IDS=$(echo "$KEYS" | jq --arg TITLE "$TITLE" 'map(select(.title|ascii_downcase == ($TITLE|ascii_downcase)))[].id') - - # Loop through the keys and remove them from gitea to be replaced by the new one - echo "Removing found keys to replace with this machine" - if [ ! -z "$IDS" ]; then - for ID in $IDS; do - echo "Deleting key with ID $ID" - curl -X DELETE \ - -s -S \ - -H "Accept: application/json" \ - -H "Content-Type:application/json" \ - --url "$KEYS_URL/$ID" - done - fi +echo "Checking if key exists on the server" +if sshpass -p "$SERVERPW" ssh -o PasswordAuthentication=yes -p $SERVERPORT "$SERVERUN@$SERVERIP" "grep -q \"$KEY\" ~/.ssh/authorized_keys 2>/dev/null"; then + echo "Key already exists on the server. Skipping upload." + exit 0 fi -echo "---" -echo "Saving the new key" -curl -X POST \ - -s -S \ - -H "Accept: application/json" \ - -H "Content-Type:application/json" \ - --data "$(generate_post_data)" \ - --url "$KEYS_URL" +echo "~~~~~~~~" +echo "Uploading the SSH key to the server" +sshpass -p "$SERVERPW" ssh -p $SERVERPORT "$SERVERUN@$SERVERIP" "mkdir -p ~/.ssh && echo '$KEY' >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys" -HTTP_REPLACE="s/https:\/\/labs\.scarif\.space\//git@labs.scarif.space:/" - -for dir in "$HOME/.local/nixos"; do - dir="$HOME/.local/src/$dir" - if [ -d $dir ]; then - cd "$dir" - SSH_URL=$(git remote get-url origin | sed "$HTTP_REPLACE") - git remote set-url origin "$SSH_URL" - fi -done - -echo "Replacing remote URL to use SSH key" -DOTFILES_SSH_URL=$(git --git-dir "$HOME/.config/dotfiles/.git" --work-tree="$HOME" remote get-url origin | sed "$HTTP_REPLACE") -git --git-dir "$HOME/.config/dotfiles/.git" --work-tree="$HOME" remote set-url origin "$DOTFILES_SSH_URL" +echo "~~~~~~~~" +echo "Testing SSH connection" +ssh -i "$SSHPATH" -p $SERVERPORT "$SERVERUN@$SERVERIP" "echo 'Successfully connected to $SERVERIP'" diff --git a/.local/bin/station-install/ssh.sh b/.local/bin/station-install/ssh.sh index 60a1a2b..ffd8f82 100755 --- a/.local/bin/station-install/ssh.sh +++ b/.local/bin/station-install/ssh.sh @@ -5,9 +5,9 @@ echo "SSH Setup Script" echo "-------------------------------------" echo "Extracting login details from enpass" -LABS=$(enpass-cli -vault="$HOME/Documents/Enpass/Vaults/primary" -sort show "Scarif: Labs" 2>&1) -LABSUN=$(echo "$LABS" | grep -Po "(?<=login: )\w+") -LABSPW=$(enpass-cli -vault="$HOME/Documents/Enpass/Vaults/primary" -sort pass "Scarif: Labs") +LABS=$(enpass-cli -vault="$HOME/.local/share/Enpass/Enpass/Vaults/primary" -json -sort show "Scarif: Labs") +LABSUN=$(echo "$LABS" | jq -r '.[].login') +LABSPW=$(echo "$LABS" | jq -r '.[].password') SSHPATH="$HOME/.ssh/id_ed25519" # The path to the SSH key file TITLE="$USER@$(cat /etc/hostname)" # The title for the SSH key @@ -42,19 +42,23 @@ echo "Checking if the key exists on the server" if [[ $KEY_EXISTS == true ]]; then echo "Found keys with the same title as this machine." # Extract the ids of the keys with the same title as this machine - IDS=$(echo "$KEYS" | jq --arg TITLE "$TITLE" 'map(select(.title|ascii_downcase == ($TITLE|ascii_downcase)))[].id') + MATCH=$(echo "$KEYS" | jq --arg TITLE "$TITLE" 'map(select(.title|ascii_downcase == ($TITLE|ascii_downcase)))[]') - # Loop through the keys and remove them from gitea to be replaced by the new one - echo "Removing found keys to replace with this machine" - if [ ! -z "$IDS" ]; then - for ID in $IDS; do - echo "Deleting key with ID $ID" + if [[ -n "$MATCH" ]]; then + ID=$(echo "$MATCH" | jq -r '.id') + EXISTING_KEY=$(echo "$MATCH" | jq -r '.key') + + if [[ "$KEY" == "$EXISTING_KEY" ]]; then + echo "Key already exists and is correct. Nothing to do." + exit 0; + else + echo "Key exists but differs. Deleting existing key ID $ID" curl -X DELETE \ -s -S \ -H "Accept: application/json" \ -H "Content-Type:application/json" \ - --url "$KEYS_URL/$ID" - done + --url "$KEYS_URL/$ID" + fi fi fi @@ -83,3 +87,4 @@ echo "Replacing remote URL to use SSH key" DOTFILES_SSH_URL=$(git --git-dir "$HOME/.config/dotfiles/.git" --work-tree="$HOME" remote get-url origin | sed "$HTTP_REPLACE") git --git-dir "$HOME/.config/dotfiles/.git" --work-tree="$HOME" remote set-url origin "$DOTFILES_SSH_URL" +