Files
dotfiles/bootstrap.sh

91 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env sh
set -eu
SSH_DIR="$HOME/.ssh"
MACHINE_KEY="$SSH_DIR/id_ed25519"
providers="github university strato gitea"
mkdir -p "$SSH_DIR"
chmod 700 "$SSH_DIR"
###############################################################################
# 1. Ensure machine-only key exists
###############################################################################
if [ ! -e "$MACHINE_KEY" ]; then
echo "No machine key found. Generating id_ed25519 (machine-only)."
ssh-keygen \
-t ed25519 \
-f "$MACHINE_KEY" \
-N "" \
-C "$(hostname)-machine"
chmod 600 "$MACHINE_KEY"
chmod 644 "$MACHINE_KEY.pub"
echo "Machine key created:"
echo " $MACHINE_KEY"
echo " $MACHINE_KEY.pub"
else
echo "Machine key already exists: $MACHINE_KEY"
fi
###############################################################################
# 2. Provider-specific key bootstrap
###############################################################################
echo
echo "Select provider:"
i=1
for p in $providers; do
printf " %d) %s\n" "$i" "$p"
i=$((i + 1))
done
printf "> "
read -r choice
case "$choice" in
1) provider="github" ;;
2) provider="university" ;;
3) provider="strato" ;;
4) provider="gitea" ;;
*)
echo "Invalid selection" >&2
exit 1
;;
esac
key_path="$SSH_DIR/id_$provider"
if [ -e "$key_path" ]; then
echo "Refusing to overwrite existing key: $key_path" >&2
exit 1
fi
umask 077
echo
echo "Paste the private key for '$provider'."
echo "Finish with EOF (Ctrl-D on empty line)."
echo
key="$(cat)"
case "$key" in
*"BEGIN "*PRIVATE*" KEY"*)
;;
*)
echo "Input does not look like a private key. Aborting." >&2
exit 1
;;
esac
printf "%s\n" "$key" > "$key_path"
chmod 600 "$key_path"
echo
echo "Key written to $key_path with permissions 600"