Create ssh keys + .ppk for login to server without password
#!/usr/bin/env zsh
# To prevent bruteforce of ssh against your server, you should create & upload ssh keys and disable password login
# 1) Ensure zenity installed (if not already):
if ! command -v zenity >/dev/null 2>&1; then
sudo apt-get install -y zenity
log "Installed zenity"
else
log "zenity already installed"
fi
zen_info() { zenity --info --width=520 --height=300 --text="$1"; }
zen_entry(){ zenity --entry --width=520 --text="$1"; }
zen_yn() { zenity --question --width=520 --text="$1"; return $?; }
# 2) SSH key generation flow:
zen_yn "Do you want to generate SSH keys (ed25519) and store them under ~/.ssh/
TARGET_USER="${TARGET_USER:-$USER}"
TARGET_HOME="${TARGET_HOME:-/home/$TARGET_USER}"
key_dir="$TARGET_HOME/.ssh/$label"
sudo -u "$TARGET_USER" mkdir -p "$key_dir"
sudo -u "$TARGET_USER" chmod 700 "$TARGET_HOME/.ssh"
sudo -u "$TARGET_USER" ssh-keygen -t ed25519 -C "$email" -f "$key_dir/id_ed25519"
sudo chmod 700 "$TARGET_HOME/.ssh"
sudo chmod 700 "$key_dir"
sudo chmod 600 "$key_dir/id_ed25519"
sudo chmod 644 "$key_dir/id_ed25519.pub"
log "Generated SSH key at $key_dir/id_ed25519"
zen_info "SSH key generated.\nPublic key:\n\n$(sudo cat "$key_dir/id_ed25519.pub")\n\nYou can copy that to the server's authorized_keys."
# 3) Offer to convert to PPK for FileZilla (puttygen):
zen_yn "Convert private key to PuTTY PPK (requires putty-tools)?"
if [[ $? -eq 0 ]]; then
sudo apt-get install -y putty-tools
sudo -u "$TARGET_USER" puttygen "$key_dir/id_ed25519" -o "$TARGET_HOME/Desktop/${label}.ppk"
sudo chown "$TARGET_USER":"$TARGET_USER" "$TARGET_HOME/Desktop/${label}.ppk"
zen_info "All done - PPK created on Desktop: $TARGET_HOME/Desktop/${label}.ppk"
fi
exit 0
