itamae-plugin-recipe-openssh 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6477bb08a13b2409a83f5d0a10b09d2947f55f74
4
+ data.tar.gz: fa01895ea95dddd8f56dfd9d0f0e0f22e3011b7e
5
+ SHA512:
6
+ metadata.gz: ddc2e34cb755ef108eef87b75c0f0c822b15c6e489ccd24dd5a0728002292789d4db8caaf0f804d49dd36b921c5d4d12fe1380117f0f9be72bd07670cd315be8
7
+ data.tar.gz: 2bddbc68f4edab97b735d3e4ca9da5deb23bbf27c4dbbf3d5fd0f42e39db48b98db470dce441982a991f843871b559b5607833193cfa27f6110031fb471dcc43
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.2
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in itamae-plugin-recipe-sshd.gemspec
4
+ gemspec
@@ -0,0 +1,37 @@
1
+ # Itamae::Plugin::Recipe::Openssh
2
+
3
+ Itamae recipe plugin for openssh
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'itamae-plugin-recipe-sshd'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install itamae-plugin-recipe-sshd
20
+
21
+ ## Usage
22
+
23
+ TODO: Write usage instructions here
24
+
25
+ ## Development
26
+
27
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
28
+
29
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
30
+
31
+ ## Contributing
32
+
33
+ 1. Fork it ( https://github.com/[my-github-username]/itamae-plugin-recipe-sshd/fork )
34
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
35
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
36
+ 4. Push to the branch (`git push origin my-new-feature`)
37
+ 5. Create a new Pull Request
@@ -0,0 +1,27 @@
1
+ require 'rake'
2
+ require 'rspec/core/rake_task'
3
+
4
+ task :spec => 'spec:all'
5
+ task :default => :spec
6
+
7
+ namespace :spec do
8
+ targets = []
9
+ Dir.glob('./spec/*').each do |dir|
10
+ next unless File.directory?(dir)
11
+ target = File.basename(dir)
12
+ target = "_#{target}" if target == "default"
13
+ targets << target
14
+ end
15
+
16
+ task :all => targets
17
+ task :default => :all
18
+
19
+ targets.each do |target|
20
+ original_target = target == "_default" ? target[1..-1] : target
21
+ desc "Run serverspec tests to #{original_target}"
22
+ RSpec::Core::RakeTask.new(target.to_sym) do |t|
23
+ ENV['TARGET_HOST'] = original_target
24
+ t.pattern = "spec/#{original_target}/*_spec.rb"
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,19 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ VAGRANTFILE_API_VERSION = "2"
5
+
6
+ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
7
+
8
+ config.vm.define :centos66 do |c|
9
+ c.vm.box = "centos6.6"
10
+ c.vm.box_url = 'https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.0.0/centos-6.6-x86_64.box'
11
+ c.vm.network :private_network, ip: '192.168.33.11'
12
+ end
13
+
14
+ config.vm.define :ubuntu1404 do |c|
15
+ c.vm.box = "ubuntu1404"
16
+ c.vm.box_url = 'https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box'
17
+ c.vm.network :private_network, ip: '192.168.33.12'
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'itamae/plugin/recipe/openssh/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "itamae-plugin-recipe-openssh"
8
+ spec.version = Itamae::Plugin::Recipe::Openssh::VERSION
9
+ spec.authors = ["namusyaka"]
10
+ spec.email = ["namusyaka@gmail.com"]
11
+
12
+ spec.summary = %q{itamae recipe plugin for openssh.}
13
+ spec.description = spec.summary
14
+ spec.homepage = "https://github.com/namusyaka/itamae-plugin-recipe-openssh"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency "itamae-plugin-resource-iptables"
22
+ spec.add_development_dependency "bundler", "~> 1.9"
23
+ spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "serverspec"
25
+ end
@@ -0,0 +1,129 @@
1
+ node["openssh"]["server"] ||= {}
2
+ node["openssh"]["client"] ||= {}
3
+ node["openssh"]["server"]["port"] ||= 22
4
+
5
+ node['openssh']['package_name'] ||=
6
+ case node['platform_family']
7
+ when 'rhel', 'fedora'
8
+ %w(openssh-clients openssh-server)
9
+ when 'arch', 'suse', 'gentoo'
10
+ %w(openssh)
11
+ when 'freebsd', 'smartos'
12
+ %w()
13
+ else
14
+ %w(openssh-client openssh-server)
15
+ end
16
+
17
+ node['openssh']['service_name'] ||=
18
+ case node['platform_family']
19
+ when 'rhel', 'fedora', 'suse', 'freebsd', 'gentoo', 'arch'
20
+ 'sshd'
21
+ else
22
+ 'ssh'
23
+ end
24
+
25
+ node['openssh']['config_mode'] ||=
26
+ case node['platform_family']
27
+ when 'rhel', 'fedora'
28
+ '0600'
29
+ else
30
+ '0644'
31
+ end
32
+
33
+ node['openssh']['rootgroup'] ||=
34
+ case node['platform_family']
35
+ when 'freebsd'
36
+ 'wheel'
37
+ else
38
+ 'root'
39
+ end
40
+
41
+ node['openssh']['client']['host'] ||= '*'
42
+ # node['openssh']['client']['forward_agent'] ||= 'no'
43
+ # node['openssh']['client']['forward_x11'] ||= 'no'
44
+ # node['openssh']['client']['rhosts_rsa_authentication'] ||= 'no'
45
+ # node['openssh']['client']['rsa_authentication'] ||= 'yes'
46
+ # node['openssh']['client']['password_authentication'] ||= 'yes'
47
+ # node['openssh']['client']['host_based_authentication'] ||= 'no'
48
+ # node['openssh']['client']['gssapi_authentication'] ||= 'no'
49
+ # node['openssh']['client']['gssapi_delegate_credentials'] ||= 'no'
50
+ # node['openssh']['client']['batch_mode'] ||= 'no'
51
+ # node['openssh']['client']['check_host_ip'] ||= 'yes'
52
+ # node['openssh']['client']['address_family'] ||= 'any'
53
+ # node['openssh']['client']['connect_timeout'] ||= '0'
54
+ # node['openssh']['client']['strict_host_key_checking'] ||= 'ask'
55
+ # node['openssh']['client']['identity_file'] ||= '~/.ssh/identity'
56
+ # node['openssh']['client']['identity_file_rsa'] ||= '~/.ssh/id_rsa'
57
+ # node['openssh']['client']['identity_file_dsa'] ||= '~/.ssh/id_dsa'
58
+ # node['openssh']['client']['port'] ||= '22'
59
+ # node['openssh']['client']['protocol'] ||= [ '2 1' ]
60
+ # node['openssh']['client']['cipher'] ||= '3des'
61
+ # node['openssh']['client']['ciphers'] ||= [ 'aes128-ctr aes192-ctr aes256-ctr arcfour256 arcfour128 aes128-cbc 3des-cbc' ]
62
+ # node['openssh']['client']['macs'] ||= [ 'hmac-md5 hmac-sha1 umac-64@openssh.com hmac-ripemd160' ]
63
+ # node['openssh']['client']['escape_char'] ||= '~'
64
+ # node['openssh']['client']['tunnel'] ||= 'no'
65
+ # node['openssh']['client']['tunnel_device'] ||= 'any:any'
66
+ # node['openssh']['client']['permit_local_command'] ||= 'no'
67
+ # node['openssh']['client']['visual_host_key'] ||= 'no'
68
+ # node['openssh']['client']['proxy_command'] ||= 'ssh -q -W %h:%p gateway.example.com'
69
+ # sshd config group
70
+ # node['openssh']['server']['port'] ||= '22'
71
+ # node['openssh']['server']['address_family'] ||= 'any'
72
+ # node['openssh']['server']['listen_address'] ||= [ '0.0.0.0 ::' ]
73
+ # node['openssh']['server']['protocol'] ||= '2'
74
+ # node['openssh']['server']['host_key_v1'] ||= '/etc/ssh/ssh_host_key'
75
+ # node['openssh']['server']['host_key_rsa'] ||= '/etc/ssh/ssh_host_rsa_key'
76
+ # node['openssh']['server']['host_key_dsa'] ||= '/etc/ssh/ssh_host_dsa_key'
77
+ if node['platform_family'] == 'smartos'
78
+ node['openssh']['server']['host_key'] ||= ['/var/ssh/ssh_host_rsa_key', '/var/ssh/ssh_host_dsa_key']
79
+ end
80
+ # node['openssh']['server']['host_key_ecdsa'] ||= '/etc/ssh/ssh_host_ecdsa_key'
81
+ # node['openssh']['server']['key_regeneration_interval'] ||= '1h'
82
+ # node['openssh']['server']['server_key_bits'] ||= '1024'
83
+ # node['openssh']['server']['syslog_facility'] ||= 'AUTH'
84
+ # node['openssh']['server']['log_level'] ||= 'INFO'
85
+ # node['openssh']['server']['login_grace_time'] ||= '2m'
86
+ # node['openssh']['server']['permit_root_login'] ||= 'yes'
87
+ # node['openssh']['server']['strict_modes'] ||= 'yes'
88
+ # node['openssh']['server']['max_auth_tries'] ||= '6'
89
+ # node['openssh']['server']['max_sessions'] ||= '10'
90
+ # node['openssh']['server']['r_s_a_authentication'] ||= 'yes'
91
+ # node['openssh']['server']['pubkey_authentication'] ||= 'yes'
92
+ # node['openssh']['server']['authorized_keys_file'] ||= '%h/.ssh/authorized_keys'
93
+ # node['openssh']['server']['rhosts_r_s_a_authentication'] ||= 'no'
94
+ # node['openssh']['server']['host_based_authentication'] ||= 'no'
95
+ # node['openssh']['server']['ignore_user_known_hosts'] ||= 'no'
96
+ # node['openssh']['server']['ignore_rhosts'] ||= 'yes'
97
+ # node['openssh']['server']['password_authentication'] ||= 'yes'
98
+ # node['openssh']['server']['permit_empty_passwords'] ||= 'no'
99
+ node['openssh']['server']['challenge_response_authentication'] ||= 'no'
100
+ # node['openssh']['server']['kerberos_authentication'] ||= 'no'
101
+ # node['openssh']['server']['kerberos_or_localpasswd'] ||= 'yes'
102
+ # node['openssh']['server']['kerberos_ticket_cleanup'] ||= 'yes'
103
+ # node['openssh']['server']['kerberos_get_afs_token'] ||= 'no'
104
+ # node['openssh']['server']['gssapi_authentication'] ||= 'no'
105
+ # node['openssh']['server']['gssapi_clean_up_credentials'] ||= 'yes'
106
+ node['openssh']['server']['use_p_a_m'] ||= 'yes' unless node['platform_family'] == 'smartos'
107
+ # node['openssh']['server']['allow_agent_forwarding'] ||= 'yes'
108
+ # node['openssh']['server']['allow_tcp_forwarding'] ||= 'yes'
109
+ # node['openssh']['server']['gateway_ports'] ||= 'no'
110
+ # node['openssh']['server']['x11_forwarding'] ||= 'no'
111
+ # node['openssh']['server']['x11_display_offset'] ||= '10'
112
+ # node['openssh']['server']['x11_use_localhost'] ||= 'yes'
113
+ # node['openssh']['server']['print_motd'] ||= 'yes'
114
+ # node['openssh']['server']['print_last_log'] ||= 'yes'
115
+ # node['openssh']['server']['t_c_p_keep_alive'] ||= 'yes'
116
+ # node['openssh']['server']['use_login'] ||= 'no'
117
+ # node['openssh']['server']['use_privilege_separation'] ||= 'yes'
118
+ # node['openssh']['server']['permit_user_environment'] ||= 'no'
119
+ # node['openssh']['server']['compression'] ||= 'delayed'
120
+ # node['openssh']['server']['client_alive_interval'] ||= '0'
121
+ # node['openssh']['server']['client_alive_count_max'] ||= '3'
122
+ # node['openssh']['server']['use_dns'] ||= 'yes'
123
+ # node['openssh']['server']['pid_file'] ||= '/var/run/sshd.pid'
124
+ # node['openssh']['server']['max_startups'] ||= '10'
125
+ # node['openssh']['server']['permit_tunnel'] ||= 'no'
126
+ # node['openssh']['server']['chroot_directory'] ||= 'none'
127
+ # node['openssh']['server']['banner'] ||= 'none'
128
+ # node['openssh']['server']['subsystem'] ||= 'sftp /usr/libexec/sftp-server'
129
+ node['openssh']['server']['match'] ||= {}
@@ -0,0 +1,40 @@
1
+ include_recipe "openssh::attributes"
2
+
3
+ def listen_addr_for(interface, type)
4
+ interface_node = node['network']['interfaces'][interface]['addresses']
5
+ interface_node.select { |_address, data| data['family'] == type }.keys[0]
6
+ end
7
+
8
+ node['openssh']['package_name'].each do |name|
9
+ package name
10
+ end
11
+
12
+ template '/etc/ssh/ssh_config' do
13
+ source 'templates/ssh_config.erb'
14
+ mode '0644'
15
+ owner 'root'
16
+ group node['openssh']['rootgroup']
17
+ end
18
+
19
+ if node['openssh']['listen_interfaces']
20
+ listen_addresses = [].tap do |a|
21
+ node['openssh']['listen_interfaces'].each_pair do |interface, type|
22
+ a << listen_addr_for(interface, type)
23
+ end
24
+ end
25
+
26
+ node.set['openssh']['server']['listen_address'] = listen_addresses
27
+ end
28
+
29
+ template '/etc/ssh/sshd_config' do
30
+ source 'templates/sshd_config.erb'
31
+ mode node['openssh']['config_mode']
32
+ owner 'root'
33
+ group node['openssh']['rootgroup']
34
+ notifies :restart, 'service[sshd]'
35
+ end
36
+
37
+ service 'ssh' do
38
+ name node['openssh']['service_name']
39
+ action [:enable, :start]
40
+ end
@@ -0,0 +1,13 @@
1
+ require 'itamae/plugin/resource/iptables_rule'
2
+ require 'itamae/plugin/resource/iptables_save'
3
+
4
+ include_recipe "openssh::default"
5
+
6
+ iptables_rule('accept ssh') do
7
+ action :accept
8
+ chain "FORWARD"
9
+ protocol "tcp"
10
+ dport node['openssh']['server']['port']
11
+ end
12
+
13
+ iptables_save '/etc/iptables.rules'
@@ -0,0 +1,11 @@
1
+ require "itamae/plugin/recipe/openssh/version"
2
+
3
+ module Itamae
4
+ module Plugin
5
+ module Recipe
6
+ module Openssh
7
+ # Your code goes here...
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,17 @@
1
+ # This file was generated by Chef for <%= node['fqdn'] %>
2
+ # Do NOT modify this file by hand!
3
+
4
+ <% node['openssh']['client'].each do |key, value| -%>
5
+ <% if value.kind_of? Array -%>
6
+ <% value.each do |item| -%>
7
+ <%= "#{key.split("_").map { |w| w.capitalize}.join} #{item}" %>
8
+ <% end -%>
9
+ <% elsif value.kind_of? Hash -%>
10
+ <%= "Host #{key}"%>
11
+ <% value.each do |host_key, host_value| -%>
12
+ <%= "#{host_key.split("_").map { |w| w.capitalize}.join} #{host_value}" %>
13
+ <% end -%>
14
+ <% else -%>
15
+ <%= "#{key.split("_").map { |w| w.capitalize}.join} #{value}"%>
16
+ <% end -%>
17
+ <% end -%>
@@ -0,0 +1,26 @@
1
+ # This file was generated by Itamae for <%= node['fqdn'] %>
2
+
3
+ <% node['openssh']['server'].dup.reject{|k,v| k=='match'}.map do |key, value| -%>
4
+ <% if value.kind_of? Array -%>
5
+ <% value.each do |item| -%>
6
+ <%= "#{key.split("_").map { |w| w.capitalize}.join} #{item}" %>
7
+ <% end -%>
8
+ <% else -%>
9
+ <%= "#{key.split("_").map { |w| w.capitalize}.join} #{value}"%>
10
+ <% end -%>
11
+ <% end -%>
12
+
13
+ <% unless node['openssh']['server']['match'].empty? || !defined?(node['openssh']['server']['match']) -%>
14
+ <% node['openssh']['server']['match'].sort.map do |match_key, match_items| -%>
15
+ Match <%= match_key %>
16
+ <% match_items.sort.map do |key, value| -%>
17
+ <% if value.kind_of? Array -%>
18
+ <% value.each do |item| -%>
19
+ <%= " #{key.split("_").map { |w| w.capitalize}.join} #{item}" %>
20
+ <% end -%>
21
+ <% else -%>
22
+ <%= " #{key.split("_").map { |w| w.capitalize}.join} #{value}"%>
23
+ <% end -%>
24
+ <% end -%>
25
+ <% end -%>
26
+ <% end -%>
@@ -0,0 +1,9 @@
1
+ module Itamae
2
+ module Plugin
3
+ module Recipe
4
+ module Openssh
5
+ VERSION = "0.1.0"
6
+ end
7
+ end
8
+ end
9
+ end
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: itamae-plugin-recipe-openssh
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - namusyaka
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-06-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: itamae-plugin-resource-iptables
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.9'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: serverspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: itamae recipe plugin for openssh.
70
+ email:
71
+ - namusyaka@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - ".rspec"
78
+ - ".travis.yml"
79
+ - Gemfile
80
+ - README.md
81
+ - Rakefile
82
+ - Vagrantfile
83
+ - itamae-plugin-recipe-openssh.gemspec
84
+ - lib/itamae/plugin/recipe/openssh/attributes.rb
85
+ - lib/itamae/plugin/recipe/openssh/default.rb
86
+ - lib/itamae/plugin/recipe/openssh/iptables.rb
87
+ - lib/itamae/plugin/recipe/openssh/openssh.rb
88
+ - lib/itamae/plugin/recipe/openssh/templates/ssh_config.erb
89
+ - lib/itamae/plugin/recipe/openssh/templates/sshd_config.erb
90
+ - lib/itamae/plugin/recipe/openssh/version.rb
91
+ homepage: https://github.com/namusyaka/itamae-plugin-recipe-openssh
92
+ licenses: []
93
+ metadata: {}
94
+ post_install_message:
95
+ rdoc_options: []
96
+ require_paths:
97
+ - lib
98
+ required_ruby_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ requirements: []
109
+ rubyforge_project:
110
+ rubygems_version: 2.4.5
111
+ signing_key:
112
+ specification_version: 4
113
+ summary: itamae recipe plugin for openssh.
114
+ test_files: []
115
+ has_rdoc: