SSH कुंजियों को हटाने के लिए कठपुतली का उपयोग स्पष्ट रूप से अनुमति नहीं है


12

मैं कठपुतली का उपयोग SSH कुंजी वितरित करने के लिए कर रहा हूँ, जैसे:

ssh_authorized_key { "alice@foo.com":
   ensure => present,
   key => 'xxxx',
   type => 'ssh-rsa',
   user => 'deploy',
}

~ / .Ssh / अधिकृत_की फाइल कई वर्गों से कुंजियों के मिश्रण से युक्त होती है, जो वांछित परिणाम है। हालाँकि, यदि कोई कुंजी मैन्युअल रूप से $ HOME / .ssh / अधिकृत_keys में जोड़ी जाती है, तो कठपुतली इसे जगह पर छोड़ देगी। क्या किसी भी कुंजी को हमेशा हटाने का एक तरीका है जिसे स्पष्ट रूप से प्रकट रूप से परिभाषित नहीं किया गया है?

मेरे पास कठपुतली संस्करण 2.7.1 है।


मैं अपने सभी अधिकृत_की फ़ाइलों की एक प्रतिलिपि प्राप्त करने के लिए निर्यात संसाधनों का उपयोग करने के बारे में सोच रहा था। तब मैं असामान्य कुंजी खोजने के लिए स्क्रिप्ट चला सकता था, और या तो उन्हें कठपुतली में जोड़ सकता था या उन्हें हटाने के लिए एक संसाधन जोड़ सकता था।
1938 में Zoredache

जवाबों:



13

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'
}

इस पद्धति के साथ, उपयोगकर्ता के पास कभी भी कुंजी नहीं होगी जो कठपुतली विन्यास में स्पष्ट रूप से निर्दिष्ट नहीं है। कुंजी स्ट्रिंग का उपयोग अधिकृत_कीटों में किया जाता है जैसे कि यह है, इसलिए विकल्प और प्रतिबंध जोड़ना तुच्छ है।

मुझे यह सुनकर खुशी होगी कि क्या दूसरों ने इस पद्धति का सफलतापूर्वक उपयोग किया है!


3

आपको संसाधन मेटाटाइप का उपयोग करके ऐसा करने में सक्षम होना चाहिए । ईजी

resources { 'ssh_authorized_key': noop => true, purge => true, }

सेटिंग noop => true,हटाने से रोकता है। इसके बजाय, कठपुतली रिपोर्ट करेगी कि क्या हटाया जाएगा। यदि यह है कि आप क्या चाहते हैं, noop स्टेटमेंट निकालें ।

मानव रहित संसाधनों पर परिचालन करने के लिए आदर्श वाक्यविन्यास पर चर्चा चल रही है

संपादित करें: जैसा कि टिप्पणियों में उल्लेख किया गया है, यह उत्तर काम नहीं करता है।


यह आवाज़ वैसी ही है जैसी मैं देख रहा हूँ। जब मैं इस लाइन को जोड़ता हूं, तो कठपुतली यह त्रुटि पैदा करता है: puppet-agent[9895]: (/Stage[main]//Resources[ssh_authorized_key]) Failed to generate additional resources using 'generate': Attribute 'user' or 'target' is mandatory. मैंने एक उपयोगकर्ता को जोड़ने की कोशिश की, और फिर यह कहता है Could not retrieve catalog from remote server: Error 400 on SERVER: Invalid parameter user । कोई विचार?
डायलन टाॅक

मुझे यकीन नहीं है। यह शायद पर मूल्य पूछ रहा है groups.google.com/group/puppet-users
sciurus

1
मैं वास्तव में स्पष्ट नहीं हूँ कि यह क्यों स्वीकार किया गया उत्तर है: कठपुतली लैब्स के अनुसार, यह काम नहीं करता है और यह नहीं है: प्रोजेक्ट्सpuppetlabs.com/issues/1917 । ओपी, क्या यह आपके लिए काम करता है?
बिल वीस

1
नहीं, मैंने इसे करने की कोशिश नहीं की, मुझे उम्मीद थी कि यह ऐसा व्यवहार करेगा जैसा कि अन्य संसाधनों (जैसे होस्ट, नगियोस प्रकार) के लिए किया गया था। ऐसा लगता है कि आप सही हैं और यह अभी तक ssh कीज़ के लिए काम नहीं करता
है-

1

कठपुतली फोर्ज पर अपाचे लाइसेंस, संस्करण 2.0 के तहत एक मॉड्यूल प्रकाशित किया गया है जो इस क्षमता को प्रदान करता है।

यह हालांकि टेम्प्लेट के बजाय कठपुतली कॉन्टेक्ट पर निर्भर करता है।

https://github.com/nightfly19/puppet-ssh_keys/tree/master/manifests

एक पैरामीटर के रूप में कुंजियों की एक सरणी को पारित करने के बजाय आप प्रत्येक कुंजी के लिए अलग प्रविष्टियों को परिभाषित करते हैं।

मिको के अलग दृष्टिकोण, लेकिन वही शुद्ध परिणाम।


forge.puppetlabs.com/nightfly/ssh_keys कठपुतली फोर्ज लिंक है।
रॉडने
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.