30 lines
951 B
Bash
30 lines
951 B
Bash
#!/bin/bash
|
|
|
|
# Configuration
|
|
URL="https://git.1337733.xyz/martin/sshconfig/raw/branch/main/authorized_keys"
|
|
LOCAL_FILE="$HOME/.ssh/authorized_keys"
|
|
|
|
# Ensure .ssh exists
|
|
mkdir -p ~/.ssh && chmod 700 ~/.ssh
|
|
touch "$LOCAL_FILE"
|
|
|
|
echo "Checking for new keys..."
|
|
|
|
# 1. Download keys to a temporary file
|
|
temp_keys=$(mktemp)
|
|
curl -s "$URL" > "$temp_keys"
|
|
|
|
# 2. Add a newline to the local file to prevent "glued" keys
|
|
echo "" >> "$LOCAL_FILE"
|
|
|
|
# 3. Combine files and remove duplicates while keeping order
|
|
# This 'awk' magic keeps the first occurrence of every line and ignores the rest.
|
|
# It preserves your comments and their relationship to the keys.
|
|
cp "$LOCAL_FILE" "${LOCAL_FILE}.bak"
|
|
cat "$LOCAL_FILE" "$temp_keys" | awk '!visited[$0]++' > "${LOCAL_FILE}.tmp" && mv "${LOCAL_FILE}.tmp" "$LOCAL_FILE"
|
|
|
|
# 4. Final Cleanup
|
|
chmod 600 "$LOCAL_FILE"
|
|
rm "$temp_keys"
|
|
|
|
echo "Done! New keys (if any) have been added. A backup was created at authorized_keys.bak." |