a4d0d954c8cd2105db43bb2ee3afefd9284f12bf
[mirror/dsa-puppet.git] / modules / ssh / manifests / authorized_key_add.pp
1 # store ssh authorized_keys snippets that roles on different hosts can then
2 # collect using ssh::authorized_key_collect
3
4 define ssh::authorized_key_add(
5   String $target_user,
6   String $command,
7   String $key,
8   String $collect_tag,
9   Array[Stdlib::IP::Address] $from_hosts = $base::public_addresses,
10 ) {
11   $from = $from_hosts.join(',')
12
13   if (size(split($key, "\n")) > 1) {
14     fail('More than one line in key for ssh::authorized_key')
15   }
16   if (size(split($command, '"')) > 1) {
17     fail('command must not contain double quotes')
18   }
19   if (size(split($from, '"')) > 1) {
20     fail('from_hosts must not contain double quotes')
21   }
22
23   $from_space = $from_hosts.join(' ')
24
25   if $key {
26     @@concat::fragment { "ssh::authorized_key::${name} ${target_user} ${from}":
27       tag     => "ssh::authorized_key::fragment::${collect_tag}::${target_user}",
28       target  => "/etc/ssh/userkeys/${target_user}",
29       order   => '200',
30       content => @("EOF"),
31                  command="${command}",from="${from}",restrict ${key}
32                  | EOF
33     }
34   } else {
35     notify{ "Warning, ssh key for ${name}, ${target_user} not defined (yet?).": }
36   }
37
38   @@ferm::rule { "ssh-${collect_tag}_${target_user}-${name}":
39     tag         => "ssh::authorized_key::ferm::${collect_tag}::${target_user}",
40     description => "allow ssh for ssh to ${target_user}",
41     domain      => '(ip ip6)',
42     chain       => 'ssh',
43     rule        => "saddr (${from_space}) ACCEPT",
44   }
45 }