ssh_scan 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +36 -0
- data/.rspec +2 -0
- data/.travis.yml +9 -0
- data/CONTRIBUTING.md +47 -0
- data/Gemfile +3 -0
- data/README.md +54 -0
- data/Rakefile +15 -0
- data/bin/ssh_scan.rb +14 -0
- data/lib/ssh_scan.rb +11 -0
- data/lib/ssh_scan/basic_server.rb +19 -0
- data/lib/ssh_scan/constants.rb +19 -0
- data/lib/ssh_scan/policy.rb +75 -0
- data/lib/ssh_scan/protocol.rb +97 -0
- data/lib/ssh_scan/scan_engine.rb +37 -0
- data/lib/ssh_scan/version.rb +3 -0
- data/lib/string_ext.rb +6 -0
- data/ssh_scan.gemspec +32 -0
- metadata +117 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f6911a09269a07da696877c04d8d8e436875ca78
|
4
|
+
data.tar.gz: 4fb3f5b3e716db185cf140b060342404350467e6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bd6f4506587b796e7a9c5374aa6209c348df48a5fea9fc13f7a50b5eed89ca9c648ebae5d70e73af6db6fc1977a424e06b6d6d242f732dc37921ab9e04e6f59d
|
7
|
+
data.tar.gz: f2d4380fb4dd20f49968f9546b03646ad122c4ca6222e34d0408e265906f47ef32edeceb73113a55fa087b6e4b42d4959aea10aa437ee997c0f0d154d87f628a
|
data/.gitignore
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
/.config
|
4
|
+
/coverage/
|
5
|
+
/InstalledFiles
|
6
|
+
/pkg/
|
7
|
+
/spec/reports/
|
8
|
+
/spec/examples.txt
|
9
|
+
/test/tmp/
|
10
|
+
/test/version_tmp/
|
11
|
+
/tmp/
|
12
|
+
|
13
|
+
## Specific to RubyMotion:
|
14
|
+
.dat*
|
15
|
+
.repl_history
|
16
|
+
build/
|
17
|
+
|
18
|
+
## Documentation cache and generated files:
|
19
|
+
/.yardoc/
|
20
|
+
/_yardoc/
|
21
|
+
/doc/
|
22
|
+
/rdoc/
|
23
|
+
|
24
|
+
## Environment normalization:
|
25
|
+
/.bundle/
|
26
|
+
/vendor/bundle
|
27
|
+
/lib/bundler/man/
|
28
|
+
|
29
|
+
# for a library or gem, you might want to ignore these files since the code is
|
30
|
+
# intended to run in multiple environments; otherwise, check them in:
|
31
|
+
# Gemfile.lock
|
32
|
+
# .ruby-version
|
33
|
+
# .ruby-gemset
|
34
|
+
|
35
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
36
|
+
.rvmrc
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# Contributing to ssh_scan
|
2
|
+
|
3
|
+
Thanks for your interest in contributing to ssh_scan.
|
4
|
+
|
5
|
+
If you could follow the following guidelines, you will make it much easier for
|
6
|
+
us to give feedback, help you find whatever problem you have and fix it.
|
7
|
+
|
8
|
+
## Issues
|
9
|
+
|
10
|
+
If you have questions of any kind, or are unsure of how something works, please
|
11
|
+
[create an issue](https://github.com/claudijd/ssh_scan/issues/new).
|
12
|
+
|
13
|
+
Please try to answer the following questions in your issue:
|
14
|
+
|
15
|
+
- What did you do?
|
16
|
+
- What did you expect to happen?
|
17
|
+
- What happened instead?
|
18
|
+
|
19
|
+
If you have identified a bug, it would be very helpful if you could include a
|
20
|
+
way to replicate the bug. Ideally a failing test would be perfect, but even a
|
21
|
+
simple script demonstrating the error would suffice.
|
22
|
+
|
23
|
+
Feature requests are great and if submitted they will be considered for
|
24
|
+
inclusion, but sending a pull request is much more awesome.
|
25
|
+
|
26
|
+
## Pull Requests
|
27
|
+
|
28
|
+
If you want your pull requests to be accepted, please follow the following guidelines:
|
29
|
+
|
30
|
+
- [**Add tests!**](http://rspec.info/) Your patch won't be accepted (or will be delayed) if it doesn't have tests.
|
31
|
+
|
32
|
+
- [**Document any change in behaviour**](http://yardoc.org/) Make sure the README and any other
|
33
|
+
relevant documentation are kept up-to-date.
|
34
|
+
|
35
|
+
- [**Create topic branches**](https://github.com/dchelimsky/rspec/wiki/Topic-Branches) Don't ask us to pull from your master branch.
|
36
|
+
|
37
|
+
- [**One pull request per feature**](https://help.github.com/articles/using-pull-requests) If you want to do more than one thing, send
|
38
|
+
multiple pull requests.
|
39
|
+
|
40
|
+
- [**Send coherent history**](http://stackoverflow.com/questions/6934752/git-combining-multiple-commits-before-pushing) Make sure each individual commit in your pull
|
41
|
+
request is meaningful. If you had to make multiple intermediate commits while
|
42
|
+
developing, please squash them before sending them to us.
|
43
|
+
|
44
|
+
- [**Follow coding conventions**](https://github.com/styleguide/ruby) The standard Ruby stuff, two spaces indent,
|
45
|
+
don't omit parens unless you have a good reason.
|
46
|
+
|
47
|
+
Thank you so much for contributing!
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# ssh_scan
|
2
|
+
|
3
|
+
[![Build Status](https://secure.travis-ci.org/claudijd/ssh_scan.png)](http://travis-ci.org/claudijd/ssh_scan)
|
4
|
+
[![Code Climate](https://codeclimate.com/github/claudijd/ssh_scan.png)](https://codeclimate.com/github/claudijd/ssh_scan)
|
5
|
+
|
6
|
+
A Ruby-based SSH configuration and policy scanner
|
7
|
+
|
8
|
+
## Key Benefits
|
9
|
+
|
10
|
+
- **Minimal Dependancies** - Uses native Ruby and BinData to do it's work, no heavy dependancies.
|
11
|
+
- **Not Just a Script** - Implementation is portable for use in another project or for automation of tasks.
|
12
|
+
- **Simple** - It is a small project so the interfaces are simple and easy to use.
|
13
|
+
|
14
|
+
## Setup
|
15
|
+
|
16
|
+
To install, type
|
17
|
+
|
18
|
+
```bash
|
19
|
+
gem install ssh_scan
|
20
|
+
```
|
21
|
+
|
22
|
+
## Example Command-Line Usage
|
23
|
+
|
24
|
+
Run `ssh_scan -h` to get this
|
25
|
+
|
26
|
+
Usage: ssh_scan [ip] [port]
|
27
|
+
-h, --help Show this message
|
28
|
+
|
29
|
+
Example: ssh_scan 192.168.1.1
|
30
|
+
Example: ssh_scan 192.168.1.1 22
|
31
|
+
|
32
|
+
## Rubies Supported
|
33
|
+
|
34
|
+
This project is integrated with [travis-ci](http://about.travis-ci.org/) and is regularly tested to work with the following rubies:
|
35
|
+
|
36
|
+
* [2.1.3](https://github.com/ruby/ruby/tree/ruby_2_1)
|
37
|
+
* [2.1.0](https://github.com/ruby/ruby/tree/ruby_2_1)
|
38
|
+
* [2.0.0](https://github.com/ruby/ruby/tree/ruby_2_0_0)
|
39
|
+
* [1.9.3](https://github.com/ruby/ruby/tree/ruby_1_9_3)
|
40
|
+
* [ruby-head](https://github.com/ruby/ruby)
|
41
|
+
* [jruby-head](http://jruby.org/)
|
42
|
+
* [jruby-19mode](http://jruby.org/)
|
43
|
+
|
44
|
+
To checkout the current build status for these rubies, click [here](https://travis-ci.org/#!/claudijd/ssh_scan).
|
45
|
+
|
46
|
+
## Contributing
|
47
|
+
|
48
|
+
If you are interested in contributing to this project, please see [CONTRIBUTING.md](https://github.com/claudijd/ssh_scan/blob/master/CONTRIBUTING.md)
|
49
|
+
|
50
|
+
## Credits
|
51
|
+
|
52
|
+
**Sources of Inspiration for ssh_scan**
|
53
|
+
|
54
|
+
- [**Mozilla OpenSSH Security Guide**](https://wiki.mozilla.org/Security/Guidelines/OpenSSH) - For providing a sane baseline policy recommendation for SSH configuration parameters (eg. Ciphers, Macs, and KexAlgos).
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rubygems/package_task'
|
4
|
+
require 'rspec'
|
5
|
+
require 'rspec/core'
|
6
|
+
require 'rspec/core/rake_task'
|
7
|
+
|
8
|
+
$:.unshift File.join(File.dirname(__FILE__), "lib")
|
9
|
+
|
10
|
+
require 'ssh_scan'
|
11
|
+
|
12
|
+
task :default => :spec
|
13
|
+
|
14
|
+
desc "Run all specs in spec directory"
|
15
|
+
RSpec::Core::RakeTask.new(:spec)
|
data/bin/ssh_scan.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'ssh_scan'
|
2
|
+
|
3
|
+
# Usage: ruby ssh_scan.rb 192.168.1.1
|
4
|
+
|
5
|
+
# Populate the info we need to perform a scan
|
6
|
+
ip = ARGV[0].chomp
|
7
|
+
port = ARGV[1].nil? ? 22 : ARGV[1].to_i
|
8
|
+
policy = SSHScan::IntermediatePolicy.new
|
9
|
+
|
10
|
+
# Perform scan and get results
|
11
|
+
scan_engine = SSHScan::ScanEngine.new()
|
12
|
+
result = scan_engine.scan(ip, port, policy)
|
13
|
+
|
14
|
+
puts JSON.pretty_generate(result)
|
data/lib/ssh_scan.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'sinatra'
|
2
|
+
require 'protocol'
|
3
|
+
require 'socket'
|
4
|
+
require 'policy'
|
5
|
+
require 'constants'
|
6
|
+
require 'scan_engine'
|
7
|
+
|
8
|
+
get '/api/v1/scan/:ip' do
|
9
|
+
if ip = params['ip']
|
10
|
+
policy = SSHScan::IntermediatePolicy.new
|
11
|
+
scan_engine = SSHScan::ScanEngine.new()
|
12
|
+
result = scan_engine.scan(ip, 22, policy)
|
13
|
+
content_type :json
|
14
|
+
return JSON.pretty_generate(result)
|
15
|
+
else
|
16
|
+
status 500
|
17
|
+
body "Error: did not supply a valid IP to be scanned"
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module SSHScan
|
2
|
+
module Constants
|
3
|
+
DEFAULT_PROTOCOL = "SSH-2.0-client"
|
4
|
+
DEFAULT_KEY_INIT_RAW = "d8eb97b11b6cacbc3285473f08004500019ceccf40004006663fc0a80a7c3ff" +
|
5
|
+
"5db33cdfd0016982e6062988da97e801810154d2b00000101080a03a6399f3d" +
|
6
|
+
"f735d6000001640414e33f813f8cdcc6b00a3d852ec1aea4980000001a64696" +
|
7
|
+
"66669652d68656c6c6d616e2d67726f7570312d736861310000000f7373682d" +
|
8
|
+
"6473732c7373682d727361000000576165733132382d6362632c336465732d6" +
|
9
|
+
"362632c626c6f77666973682d6362632c6165733139322d6362632c61657332" +
|
10
|
+
"35362d6362632c6165733132382d6374722c6165733139322d6374722c61657" +
|
11
|
+
"33235362d637472000000576165733132382d6362632c336465732d6362632c" +
|
12
|
+
"626c6f77666973682d6362632c6165733139322d6362632c6165733235362d6" +
|
13
|
+
"362632c6165733132382d6374722c6165733139322d6374722c616573323536" +
|
14
|
+
"2d63747200000021686d61632d6d64352c686d61632d736861312c686d61632" +
|
15
|
+
"d726970656d6431363000000021686d61632d6d64352c686d61632d73686131" +
|
16
|
+
"2c686d61632d726970656d64313630000000046e6f6e65000000046e6f6e650" +
|
17
|
+
"00000000000000000000000006e05b3b4"
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module SSHScan
|
2
|
+
class IntermediatePolicy
|
3
|
+
def name
|
4
|
+
self.class.to_s
|
5
|
+
end
|
6
|
+
|
7
|
+
def macs
|
8
|
+
["hmac-sha2-512","hmac-sha2-256"]
|
9
|
+
end
|
10
|
+
|
11
|
+
def encryption
|
12
|
+
["aes256-ctr","aes192-ctr","aes128-ctr"]
|
13
|
+
end
|
14
|
+
|
15
|
+
def kexs
|
16
|
+
["diffie-hellman-group-exchange-sha256"]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class PolicyManager
|
21
|
+
def initialize(result, policy)
|
22
|
+
@policy = policy
|
23
|
+
@result = result
|
24
|
+
end
|
25
|
+
|
26
|
+
def out_of_policy_encryption
|
27
|
+
target_encryption = @result[:encryption_algorithms_client_to_server] | @result[:encryption_algorithms_server_to_client]
|
28
|
+
outliers = []
|
29
|
+
target_encryption.each do |target_enc|
|
30
|
+
outliers << target_enc unless @policy.encryption.include?(target_enc)
|
31
|
+
end
|
32
|
+
return outliers
|
33
|
+
end
|
34
|
+
|
35
|
+
def out_of_policy_macs
|
36
|
+
target_macs = @result[:mac_algorithms_server_to_client] | @result[:mac_algorithms_client_to_server]
|
37
|
+
outliers = []
|
38
|
+
target_macs.each do |target_mac|
|
39
|
+
outliers << target_mac unless @policy.macs.include?(target_mac)
|
40
|
+
end
|
41
|
+
return outliers
|
42
|
+
end
|
43
|
+
|
44
|
+
def out_of_policy_kex
|
45
|
+
target_kexs = @result[:key_algorithms]
|
46
|
+
outliers = []
|
47
|
+
target_kexs.each do |target_kex|
|
48
|
+
outliers << target_kex unless @policy.kexs.include?(target_kex)
|
49
|
+
end
|
50
|
+
return outliers
|
51
|
+
end
|
52
|
+
|
53
|
+
def compliant?
|
54
|
+
out_of_policy_encryption.empty? &&
|
55
|
+
out_of_policy_macs.empty? &&
|
56
|
+
out_of_policy_kex.empty?
|
57
|
+
end
|
58
|
+
|
59
|
+
def recommendations
|
60
|
+
recommendations = []
|
61
|
+
recommendations << "Remove these Key Exchange Algos: #{out_of_policy_kex.join(", ")}" unless out_of_policy_kex.empty?
|
62
|
+
recommendations << "Remove these MAC Algos: #{out_of_policy_macs.join(", ")}" unless out_of_policy_macs.empty?
|
63
|
+
recommendations << "Remove these Encryption Ciphers: #{out_of_policy_encryption.join(", ")}" unless out_of_policy_encryption.empty?
|
64
|
+
return recommendations
|
65
|
+
end
|
66
|
+
|
67
|
+
def compliance_results
|
68
|
+
{
|
69
|
+
:policy => @policy.name,
|
70
|
+
:compliant => compliant?,
|
71
|
+
:recommendations => recommendations
|
72
|
+
}
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'bindata'
|
2
|
+
require 'string_ext'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module SSHScan
|
6
|
+
# SSHv2 KexInit
|
7
|
+
class KeyExchangeInit < BinData::Record
|
8
|
+
endian :big
|
9
|
+
uint32 :packet_length
|
10
|
+
uint8 :padding_length
|
11
|
+
uint8 :message_code
|
12
|
+
string :cookie, :length => 16
|
13
|
+
uint32 :kex_algorithms_length
|
14
|
+
string :key_algorithms_string, :length => lambda { self.kex_algorithms_length }
|
15
|
+
uint32 :server_host_key_algorithms_length
|
16
|
+
string :server_host_key_algorithms_string, :length => lambda { self.server_host_key_algorithms_length }
|
17
|
+
uint32 :encryption_algorithms_client_to_server_length
|
18
|
+
string :encryption_algorithms_client_to_server_string, :length => lambda { self.encryption_algorithms_client_to_server_length }
|
19
|
+
uint32 :encryption_algorithms_server_to_client_length
|
20
|
+
string :encryption_algorithms_server_to_client_string, :length => lambda { self.encryption_algorithms_server_to_client_length }
|
21
|
+
uint32 :mac_algorithms_client_to_server_length
|
22
|
+
string :mac_algorithms_client_to_server_string, :length => lambda { self.mac_algorithms_client_to_server_length }
|
23
|
+
uint32 :mac_algorithms_server_to_client_length
|
24
|
+
string :mac_algorithms_server_to_client_string, :length => lambda { self.mac_algorithms_server_to_client_length }
|
25
|
+
uint32 :compression_algorithms_client_to_server_length
|
26
|
+
string :compression_algorithms_client_to_server_string, :length => lambda { self.compression_algorithms_client_to_server_length }
|
27
|
+
uint32 :compression_algorithms_server_to_client_length
|
28
|
+
string :compression_algorithms_server_to_client_string, :length => lambda { self.compression_algorithms_server_to_client_length }
|
29
|
+
uint32 :languages_client_to_server_length
|
30
|
+
string :languages_client_to_server_string, :length => lambda { self.languages_client_to_server_length }
|
31
|
+
uint32 :languages_server_to_client_length
|
32
|
+
string :languages_server_to_client_string, :length => lambda { self.languages_server_to_client_length }
|
33
|
+
uint8 :kex_first_packet_follows
|
34
|
+
uint32 :reserved
|
35
|
+
|
36
|
+
def key_algorithms
|
37
|
+
self.key_algorithms_string.split(",")
|
38
|
+
end
|
39
|
+
|
40
|
+
def server_host_key_algorithms
|
41
|
+
self.server_host_key_algorithms_string.split(",")
|
42
|
+
end
|
43
|
+
|
44
|
+
def encryption_algorithms_client_to_server
|
45
|
+
self.encryption_algorithms_client_to_server_string.split(",")
|
46
|
+
end
|
47
|
+
|
48
|
+
def encryption_algorithms_server_to_client
|
49
|
+
self.encryption_algorithms_server_to_client_string.split(",")
|
50
|
+
end
|
51
|
+
|
52
|
+
def mac_algorithms_client_to_server
|
53
|
+
self.mac_algorithms_client_to_server_string.split(",")
|
54
|
+
end
|
55
|
+
|
56
|
+
def mac_algorithms_server_to_client
|
57
|
+
self.mac_algorithms_server_to_client_string.split(",")
|
58
|
+
end
|
59
|
+
|
60
|
+
def compression_algorithms_client_to_server
|
61
|
+
self.compression_algorithms_client_to_server_string.split(",")
|
62
|
+
end
|
63
|
+
|
64
|
+
def compression_algorithms_server_to_client
|
65
|
+
self.compression_algorithms_client_to_server_string.split(",")
|
66
|
+
end
|
67
|
+
|
68
|
+
def languages_client_to_server
|
69
|
+
self.languages_client_to_server_string.split(",")
|
70
|
+
end
|
71
|
+
|
72
|
+
def languages_server_to_client
|
73
|
+
self.languages_server_to_client_string.split(",")
|
74
|
+
end
|
75
|
+
|
76
|
+
# Summarize as Hash
|
77
|
+
def to_hash
|
78
|
+
{
|
79
|
+
:key_algorithms => key_algorithms,
|
80
|
+
:server_host_key_algorithms => server_host_key_algorithms,
|
81
|
+
:encryption_algorithms_client_to_server => encryption_algorithms_client_to_server,
|
82
|
+
:encryption_algorithms_server_to_client => encryption_algorithms_server_to_client,
|
83
|
+
:mac_algorithms_client_to_server => mac_algorithms_client_to_server,
|
84
|
+
:mac_algorithms_server_to_client => mac_algorithms_server_to_client,
|
85
|
+
:compression_algorithms_client_to_server => compression_algorithms_client_to_server,
|
86
|
+
:compression_algorithms_server_to_client => compression_algorithms_server_to_client,
|
87
|
+
:languages_client_to_server => languages_client_to_server,
|
88
|
+
:languages_server_to_client => languages_server_to_client,
|
89
|
+
}
|
90
|
+
end
|
91
|
+
|
92
|
+
# Summarize as JSON
|
93
|
+
def to_json
|
94
|
+
self.to_hash.to_json
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'socket'
|
2
|
+
|
3
|
+
module SSHScan
|
4
|
+
class ScanEngine
|
5
|
+
|
6
|
+
# TODO: this is pretty crude, clean this up a bit
|
7
|
+
|
8
|
+
def scan(ip, port, policy)
|
9
|
+
# Do initial protocol exchange
|
10
|
+
sock = TCPSocket.new(ip, port)
|
11
|
+
server_protocol = sock.gets
|
12
|
+
sock.puts(SSHScan::Constants::DEFAULT_PROTOCOL)
|
13
|
+
|
14
|
+
# Perform Key Initialization Exchange
|
15
|
+
sock.write(SSHScan::Constants::DEFAULT_KEY_INIT_RAW)
|
16
|
+
resp = sock.read(4)
|
17
|
+
resp += sock.read(resp.unpack("N").first)
|
18
|
+
kex_init_response = SSHScan::KeyExchangeInit.read(resp)
|
19
|
+
sock.close
|
20
|
+
|
21
|
+
# Assemble and print results
|
22
|
+
result = {
|
23
|
+
:ip => ip,
|
24
|
+
:port => port,
|
25
|
+
:server_banner => server_protocol.chomp
|
26
|
+
}
|
27
|
+
result.merge!(kex_init_response.to_hash)
|
28
|
+
|
29
|
+
# Evaluate for Policy Compliance
|
30
|
+
policy = SSHScan::IntermediatePolicy.new
|
31
|
+
policy_mgr = SSHScan::PolicyManager.new(result, policy)
|
32
|
+
result['compliance'] = policy_mgr.compliance_results
|
33
|
+
|
34
|
+
return result
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/string_ext.rb
ADDED
data/ssh_scan.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
$: << "lib"
|
2
|
+
require 'ssh_scan/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = 'ssh_scan'
|
6
|
+
s.version = SSHScan::VERSION
|
7
|
+
s.authors = ["Jonathan Claudius"]
|
8
|
+
s.date = Date.today.to_s
|
9
|
+
s.email = 'claudijd@yahoo.com'
|
10
|
+
s.platform = Gem::Platform::RUBY
|
11
|
+
s.files = Dir.glob("lib/**/*") +
|
12
|
+
Dir.glob("bin/**/*") +
|
13
|
+
[".gitignore",
|
14
|
+
".rspec",
|
15
|
+
".travis.yml",
|
16
|
+
"CONTRIBUTING.md",
|
17
|
+
"Gemfile",
|
18
|
+
"Rakefile",
|
19
|
+
"README.md",
|
20
|
+
"ssh_scan.gemspec"]
|
21
|
+
s.license = "ruby"
|
22
|
+
s.require_paths = ["lib"]
|
23
|
+
s.executables = s.files.grep(%r{^bin/[^\/]+$}) { |f| File.basename(f) }
|
24
|
+
s.summary = 'Ruby-based SSH Scanner'
|
25
|
+
s.description = 'A Ruby-based SSH scanner for configuration and policy scanning'
|
26
|
+
s.homepage = 'http://rubygems.org/gems/ssh_scan'
|
27
|
+
|
28
|
+
s.add_dependency('bindata', '~> 2.0')
|
29
|
+
s.add_development_dependency('rspec', '~> 3.0')
|
30
|
+
s.add_development_dependency('rspec-its', '~> 1.2')
|
31
|
+
s.add_development_dependency('rake', '~> 10.3')
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ssh_scan
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jonathan Claudius
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-02-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bindata
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec-its
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.2'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.2'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.3'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.3'
|
69
|
+
description: A Ruby-based SSH scanner for configuration and policy scanning
|
70
|
+
email: claudijd@yahoo.com
|
71
|
+
executables:
|
72
|
+
- ssh_scan.rb
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- ".rspec"
|
78
|
+
- ".travis.yml"
|
79
|
+
- CONTRIBUTING.md
|
80
|
+
- Gemfile
|
81
|
+
- README.md
|
82
|
+
- Rakefile
|
83
|
+
- bin/ssh_scan.rb
|
84
|
+
- lib/ssh_scan.rb
|
85
|
+
- lib/ssh_scan/basic_server.rb
|
86
|
+
- lib/ssh_scan/constants.rb
|
87
|
+
- lib/ssh_scan/policy.rb
|
88
|
+
- lib/ssh_scan/protocol.rb
|
89
|
+
- lib/ssh_scan/scan_engine.rb
|
90
|
+
- lib/ssh_scan/version.rb
|
91
|
+
- lib/string_ext.rb
|
92
|
+
- ssh_scan.gemspec
|
93
|
+
homepage: http://rubygems.org/gems/ssh_scan
|
94
|
+
licenses:
|
95
|
+
- ruby
|
96
|
+
metadata: {}
|
97
|
+
post_install_message:
|
98
|
+
rdoc_options: []
|
99
|
+
require_paths:
|
100
|
+
- lib
|
101
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
requirements: []
|
112
|
+
rubyforge_project:
|
113
|
+
rubygems_version: 2.4.8
|
114
|
+
signing_key:
|
115
|
+
specification_version: 4
|
116
|
+
summary: Ruby-based SSH Scanner
|
117
|
+
test_files: []
|