ssh_authorized_key
संसाधनों का उपयोग करने के बजाय , मैंने एक authorized_keys
संसाधन को परिभाषित करने का फैसला किया , जो एकल उपयोगकर्ता के लिए सभी एसएसएच कुंजी की एक सूची लेता है। परिभाषित इस तरह दिखता है:
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',
],
}
सशर्त रूप से SSH कुंजी जोड़ना (विभिन्न वर्गों में उदाहरण के लिए) भी आसान है, कठपुतली के +>
ऑपरेटर के लिए धन्यवाद :
Authorized_keys <| title == 'mikko' |> {
sshkeys +> 'ssh-rsa ASDFASDFASDFASDF mikko@somewhere-else.tld'
}
इस पद्धति के साथ, उपयोगकर्ता के पास कभी भी कुंजी नहीं होगी जो कठपुतली विन्यास में स्पष्ट रूप से निर्दिष्ट नहीं है। कुंजी स्ट्रिंग का उपयोग अधिकृत_कीटों में किया जाता है जैसे कि यह है, इसलिए विकल्प और प्रतिबंध जोड़ना तुच्छ है।
मुझे यह सुनकर खुशी होगी कि क्या दूसरों ने इस पद्धति का सफलतापूर्वक उपयोग किया है!