43 lines
1.1 KiB
Bash
Executable File
43 lines
1.1 KiB
Bash
Executable File
#!/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
|