aboutsummaryrefslogtreecommitdiffstats
path: root/external/sshkeys/manifests/set_authorized_keys.pp
blob: 894f8069ac1b89aac8616d474288d99fa612dc86 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# Install a public key into a server user's authorized_keys(5) file.
define sshkeys::set_authorized_keys (
  $keyname = '',
  $ensure = 'present',
  $group = '',
  $home = '',
  $options = '',
  $user
) {
  include sshkeys::var
  $_keyname = $keyname ? { '' => $title, default => $keyname }
  $_home = $home ? { "" => "/home/${user}", default => $home }
  # on the keymaster:
  $key_src_dir = "${sshkeys::var::keymaster_storage}/${_keyname}"
  $key_src_file = "${key_src_dir}/key.pub"
  # on the server:
  $key_tgt_file = "${_home}/.ssh/authorized_keys"

  File {
    owner   => $user,
    group   => $group ? { "" => $user, default => $group },
    require => User[$user],
    mode    => '0600',
  }
  Ssh_authorized_key {
    user   => $user,
    target => $key_tgt_file,
  }

  if $ensure == "absent" {
    ssh_authorized_key { $title:
      ensure => "absent",
    }
  } else {
    $key_src_content = file($key_src_file, "/dev/null")
    if ! $key_src_content {
      notify {
        "Public key file ${key_src_file} for key ${_keyname} not found on keymaster; skipping ensure => present":
      }
    } else {
      if $ensure == "present" and $key_src_content !~ /^(ssh-...) ([^ ]*)/ {
        err("Can't parse public key file ${key_src_file}")
        notify {
            "Can't parse public key file ${key_src_file} for key ${_keyname} on the keymaster: skipping ensure => ${ensure}":
        }
      } else {
        $keytype = $1
        $modulus = $2
        ssh_authorized_key { $title:
          ensure  => "present",
          type    => $keytype,
          key     => $modulus,
          options => $options ? { "" => undef, default => $options },
        }
      }
    }
  }
}