From 56ad5662ac8683ec8bfc7ba3c1c8c8cf40867b2b Mon Sep 17 00:00:00 2001 From: Cobra Date: Tue, 7 Apr 2026 15:47:31 -0400 Subject: [PATCH] Fix ssh-keygen overwrite prompt and key landing in root home MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mktemp creates the file before ssh-keygen runs — keygen sees it exists and prompts. Switch to mktemp -d so keygen writes a fresh file. When run via sudo SUDO_USER is set but HOME=/root. Resolve the real home via getent so the key lands in the operator's ~/.ssh, not root's. --- operator_setup.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/operator_setup.sh b/operator_setup.sh index 9882d82..6548ef9 100755 --- a/operator_setup.sh +++ b/operator_setup.sh @@ -515,11 +515,12 @@ SSH_DIR="${MOUNT_POINT}/root/.ssh" mkdir -p "$SSH_DIR" if [[ "$SSH_MODE" == "generate" ]]; then - TMP_KEY=$(mktemp) + TMP_DIR=$(mktemp -d) + TMP_KEY="${TMP_DIR}/id_ed25519" ssh-keygen -t ed25519 -N "" -C "" -f "$TMP_KEY" -q PRIVKEY=$(cat "$TMP_KEY") PUBKEY=$(cat "${TMP_KEY}.pub") - rm -f "$TMP_KEY" "${TMP_KEY}.pub" + rm -rf "$TMP_DIR" echo "$PUBKEY" > "${SSH_DIR}/authorized_keys" @@ -533,12 +534,14 @@ if [[ "$SSH_MODE" == "generate" ]]; then echo "---" fi - # Save locally to ~/.ssh/bb- - LOCAL_KEY_DIR="$HOME/.ssh" + # Save to the invoking user's ~/.ssh (SUDO_USER if running via sudo, else HOME) + REAL_HOME=$(getent passwd "${SUDO_USER:-$USER}" 2>/dev/null | cut -d: -f6) + LOCAL_KEY_DIR="${REAL_HOME:-$HOME}/.ssh" LOCAL_KEY_PATH="${LOCAL_KEY_DIR}/bb-${DEVICE_ID}" mkdir -p "$LOCAL_KEY_DIR" echo "$PRIVKEY" > "$LOCAL_KEY_PATH" chmod 600 "$LOCAL_KEY_PATH" + [[ -n "$SUDO_USER" ]] && chown "$SUDO_USER" "$LOCAL_KEY_PATH" || true info "Private key saved locally: ${LOCAL_KEY_PATH}" unset PRIVKEY