#!/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