From 398e3e4ed6cdc82f0eee95a8bb87c4e1ac895d44 Mon Sep 17 00:00:00 2001 From: niku Date: Tue, 17 Feb 2026 23:08:31 +0100 Subject: [PATCH] initial commit --- README.md | 16 ++++++++++++++++ sync-keypairs.sh | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 README.md create mode 100755 sync-keypairs.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..5bf2c2e --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# sync-keypairs + +Backs up all SSH keypairs into Bitwarden. + +## Prerequisites + +- [bitwarden-cli](https://github.com/bitwarden/clients/tree/main/apps/cli) installed +- Run `bw login` first + +## Usage + +```bash +./sync-keypairs.sh +``` + +This will unlock Bitwarden, sync your vault, and save each SSH keypair as a login item with attachments in `ssh-keys//`. diff --git a/sync-keypairs.sh b/sync-keypairs.sh new file mode 100755 index 0000000..271d050 --- /dev/null +++ b/sync-keypairs.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +set -xo pipefail + +if [ -z "${BW_SESSION}" ]; then + export BW_SESSION=$(bw unlock --raw) +fi + +bw sync + +user=$(whoami) +machine=$(cat /proc/sys/kernel/hostname) + +folder_name="ssh-keys/$machine/$user" + +folder=$(bw get folder $folder_name) +if [ $? -ne 0 ]; then + folder=$(bw get template folder | jq ".name=\"$folder_name\"" | bw encode | bw create folder) +fi + +folder_id=$(echo $folder | jq ".id") + +save_keypair() { + key_name=$(basename $1) + key_content=$(cat $1) + + key_entry=$(bw get item $key_name) + + if [ $? -ne 0 ]; then + login=$(bw get template item.login | jq ".username=\"$user@$machine\" | .password=\"$key_content\" | .totp=\"\"") + payload=$(bw get template item | jq ".folderId=$folder_id | .name=\"${key_name%.pub} \" | .login+=$login | .notes=\"\"" ) + + item=$(echo $payload | bw encode | bw create item) + item_id=$(echo $item | jq -r ".id") + + bw create attachment --file $1 --itemid $item_id + bw create attachment --file ${1%.pub} --itemid $item_id + fi +} + +for public_key in $HOME/.ssh/*.pub; do + save_keypair $public_key +done