aboutsummaryrefslogtreecommitdiffstats
path: root/external/sshkeys/manifests/set_authorized_keys.pp
blob: 6bbbb1b5a667c48ec9ea9718be15420e35dd30ee (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    => 600,
  }
  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 },
	}
      }
    }
  }
}