1f2c97aca1c3d528adc5943a785d680b56f3460f
[lhc/ateliers.git] / functions.sh
1 #!/bin/sh
2 # DESCRIPTION: ce fichier regroupe des utilitaires très génériques
3
4 mk_dir () {
5 local mod=${1#mod=}; shift
6 local own=${1#own=}; shift
7 sudo mkdir -p "$@"
8 ! [ ${mod:+set} ] || sudo chmod $mod "$@"
9 ! [ ${own:+set} ] || sudo chown $own "$@"
10 }
11 mk_reg () {
12 local mod=${1#mod=}; shift
13 local own=${1#own=}; shift
14 local append
15 if [ "x${1#--append}" = "x" ]
16 then append='-a'; shift
17 else append=''
18 fi
19 sudo tee >&2 $append "$@"
20 ! [ ${mod:+set} ] || sudo chmod $mod "$@"
21 ! [ ${own:+set} ] || sudo chown $own "$@"
22 }
23 mk_lnk () {
24 sudo ln -fns "$@"
25 }
26 ssh_key_add () {
27 local user=${1#user=}; shift
28 local in=$1
29 local out=$2
30 local tmp=$(mktemp -t "$vm.ssh.XXXXXXXXX.tmp")
31 # NOTE: ssh-keygen ne sait lire que depuis un fichier..
32 while IFS= read -r key
33 do
34 # DESCRIPTION: ajoute dans le compte de root les clefs SSH de l'admin non déjà ajoutées.
35 has=
36 cat >"$tmp" <<-EOF
37 $key
38 EOF
39 key_fpr=$(ssh-keygen -l -f "$tmp" | cut -d ' ' -f 1,2)
40 while IFS= read -r auth_key
41 do
42 cat >"$tmp" <<-EOF
43 $auth_key
44 EOF
45 auth_key_fpr=$(ssh-keygen -l -f "$tmp" | cut -d ' ' -f 1,2)
46 if [ "$key_fpr" = "$auth_key_fpr" ]
47 then has=1; break
48 fi
49 done <<-EOF
50 $(sudo cat /root/etc/ssh/authorized_keys)
51 EOF
52 [ ${has:+set} ] ||
53 mk_reg mod=640 own="$user:$user" --append "$out" <<-EOF
54 $key
55 EOF
56 done <"$in"
57 rm -f "$tmp"
58 }