ssh_authorized_key
리소스 를 사용하는 대신 authorized_keys
단일 사용자의 모든 SSH 키 목록을 가져 오는 리소스 를 정의하기로 결정했습니다 . 정의는 다음과 같습니다.
define authorized_keys ($sshkeys, $ensure = "present", $home = '') {
# This line allows default homedir based on $title variable.
# If $home is empty, the default is used.
$homedir = $home ? {'' => "/home/${title}", default => $home}
file {
"${homedir}/.ssh":
ensure => "directory",
owner => $title,
group => $title,
mode => 700,
require => User[$title];
"${homedir}/.ssh/authorized_keys":
ensure => $ensure,
owner => $ensure ? {'present' => $title, default => undef },
group => $ensure ? {'present' => $title, default => undef },
mode => 600,
require => File["${homedir}/.ssh"],
content => template("authorized_keys.erb");
}
}
$ssh_keys
매개 변수는 필요한 모든 키를 목록으로 사용합니다. authorized_keys.erb
템플릿은 다음과 같습니다 :
# NOTICE: This file is autogenerated by Puppet and should not be modified
<% sshkeys.each do |key| -%>
<%= key %>
<% end -%>
용법
user {'mikko':
...
}
authorized_keys {'mikko':
sshkeys => [
'ssh-rsa XXXXXXYYYYYYYYYZZZZZZZZZ mikko@domain.tld',
'ssh-rsa XXXXXXZZZZZZZZZHHHHHHHHH mikko@other-host.tld',
],
}
Puppet의 +>
연산자 덕분에 조건부로 (예를 들어 다른 클래스에서) SSH 키를 추가하는 것도 쉽습니다 .
Authorized_keys <| title == 'mikko' |> {
sshkeys +> 'ssh-rsa ASDFASDFASDFASDF mikko@somewhere-else.tld'
}
이 방법을 사용하면 사용자는 꼭두각시 구성에 명시 적으로 지정되지 않은 키를 가질 수 없습니다. authorized_keys에서 키 문자열은 그대로 사용되므로 옵션과 제한을 추가하는 것은 쉽지 않습니다.
다른 사람들이이 방법을 성공적으로 사용했다면 기뻐할 것입니다!