mirror of
https://github.com/Ravinou/borgwarehouse
synced 2024-05-05 07:13:15 +02:00
48 lines
1.5 KiB
Bash
48 lines
1.5 KiB
Bash
#!/bin/bash
|
|
|
|
# Shell created by Raven for BorgWarehouse.
|
|
# This shell takes 2 args : [user] [new SSH pub key] [quota]
|
|
# This shell updates the ssh key for a repository.
|
|
|
|
# Exit when any command fails
|
|
set -e
|
|
|
|
# Check args
|
|
if [ "$1" == "" ] || [ "$2" == "" ] || [ "$3" == "" ];then
|
|
echo "This shell takes 3 args : [user] [new SSH pub key] [quota]"
|
|
exit 1
|
|
fi
|
|
|
|
# Some variables
|
|
home="/var/borgwarehouse/$1"
|
|
|
|
# Check if the SSH public key is a valid format
|
|
# This pattern validates SSH public keys for : rsa, ed25519, ed25519-sk
|
|
pattern='(ssh-ed25519 AAAAC3NzaC1lZDI1NTE5|sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29t|ssh-rsa AAAAB3NzaC1yc2)[0-9A-Za-z+/]+[=]{0,3}(\s.*)?'
|
|
if [[ ! "$2" =~ $pattern ]]
|
|
then
|
|
echo "Invalid public SSH KEY format. Provide a key in OpenSSH format (rsa, ed25519, ed25519-sk)"
|
|
exit 2
|
|
fi
|
|
|
|
# Check if username length is 8 char. With createRepo.sh our randoms have a length of 8 characters.
|
|
# If we receive another length there is necessarily a problem.
|
|
username=$1
|
|
if [ ${#username} != 8 ]
|
|
then
|
|
echo "Error with the length of the username."
|
|
exit 3
|
|
fi
|
|
|
|
# Check if the user exists
|
|
if ! sudo grep -q $1 /etc/passwd
|
|
then
|
|
echo "The user $1 does not exist"
|
|
exit 4
|
|
fi
|
|
|
|
# Modify authorized_keys for the user : only the ssh key is modify with this regex
|
|
sudo sed -ri "s|(command=\".*\",restrict ).*|\1$2|g" "$home/.ssh/authorized_keys"
|
|
|
|
# Modify authorized_keys for the user : only the quota is modify with this regex
|
|
sudo sed -ri "s|--storage-quota.*\"|--storage-quota $3G\"|g" "$home/.ssh/authorized_keys" |