Fix ssh-keygen overwrite prompt and key landing in root home
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.
This commit is contained in:
+7
-4
@@ -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-<device_id>
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user