sshez 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -0
- data/README.md +12 -19
- data/lib/sshez.rb +6 -156
- data/lib/sshez/config_file.rb +83 -0
- data/lib/sshez/exec.rb +42 -0
- data/lib/sshez/params.rb +64 -0
- data/lib/sshez/version.rb +1 -1
- data/spec/spec_helper.rb +2 -0
- data/spec/sshez_spec.rb +81 -0
- data/sshez.gemspec +7 -8
- metadata +19 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81d4df50a28eadb6dc1d260312afc882db0991c6
|
4
|
+
data.tar.gz: 398b00d1e2b4546b27ff77d24f091c9000c93cf7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 08716750ba791d2b50da690f287cf8658f36f8509c9c1abd06bb21d6123b0ec86ae8ef4b1ab02fdb785027c3378a2d8ea1337d9e368575c5e02af286498c5eca
|
7
|
+
data.tar.gz: 99fb3da310dfc3d3187ec5a8ebbfc48e37b059a3600c54b758e92e9d39373a8737d1b567aeab04dfd0d43edfb3a110c5e675a6c7c0fece2a6e3c7ffec141f83d
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
### Unreleased
|
2
|
+
|
3
|
+
### 0.3.0 - 2015-12-14
|
4
|
+
|
5
|
+
* enhancements
|
6
|
+
* Added `list` for listing aliases
|
7
|
+
* Added `sshez remove` as another way to remove aliases
|
8
|
+
|
9
|
+
* bug fixes
|
10
|
+
* Fixed permissions bug for CentOS
|
11
|
+
* Fixed user experience issues
|
12
|
+
|
13
|
+
### 0.2.0 - 2015-12-06
|
14
|
+
|
15
|
+
* enhancements
|
16
|
+
* Added the `remove` feature
|
17
|
+
|
18
|
+
### 0.1.0 - 2015-12-05
|
19
|
+
|
20
|
+
* Initial release
|
data/README.md
CHANGED
@@ -5,43 +5,37 @@ If you have multiple servers that you access on daily bases! sshez helps you con
|
|
5
5
|
|
6
6
|
### Example
|
7
7
|
|
8
|
+
Add an alias `mw_server`
|
9
|
+
|
8
10
|
sshez mw_server root@74.125.224.72 -p 120
|
9
11
|
|
10
12
|
you will be able to use
|
11
13
|
|
12
14
|
ssh mw_server
|
13
|
-
|
14
|
-
|
15
15
|
|
16
16
|
## Installation
|
17
17
|
|
18
|
-
Add this line to your application's Gemfile:
|
19
|
-
|
20
|
-
```ruby
|
21
|
-
gem 'sshez'
|
22
|
-
```
|
23
|
-
|
24
|
-
And then execute:
|
25
|
-
|
26
|
-
$ bundle
|
27
|
-
|
28
|
-
Or install it yourself as:
|
29
|
-
|
30
18
|
$ gem install sshez
|
31
19
|
|
32
20
|
## Usage
|
33
21
|
|
34
|
-
|
22
|
+
sshez -h
|
35
23
|
|
36
|
-
Usage:
|
24
|
+
Usage:
|
25
|
+
sshez <alias> (role@host|-r) [options]
|
26
|
+
sshez remove <alias>
|
27
|
+
sshez list
|
37
28
|
|
38
29
|
Specific options:
|
39
30
|
-p, --port PORT Specify a port
|
40
31
|
-i, --identity_file [key] Add identity
|
32
|
+
-r, --remove Remove handle
|
33
|
+
-t, --test Writes nothing
|
41
34
|
|
42
35
|
Common options:
|
36
|
+
-l, --list List aliases
|
37
|
+
-v, --version Show version
|
43
38
|
-h, --help Show this message
|
44
|
-
--version
|
45
39
|
|
46
40
|
## Development
|
47
41
|
|
@@ -63,10 +57,9 @@ The gem is available as open source under the terms of the [MIT License](http://
|
|
63
57
|
## Missing
|
64
58
|
|
65
59
|
* All the other options in [ssh documentation](http://linux.die.net/man/5/ssh_config)
|
66
|
-
* Add -r option to remove aliases
|
67
60
|
|
68
61
|
## Credit
|
69
62
|
|
70
|
-
Mohamed
|
63
|
+
Mohamed Osama who gave me this idea
|
71
64
|
|
72
65
|
|
data/lib/sshez.rb
CHANGED
@@ -1,163 +1,13 @@
|
|
1
|
-
require
|
1
|
+
require 'sshez/params'
|
2
|
+
require 'sshez/config_file'
|
3
|
+
require 'sshez/exec'
|
4
|
+
require 'sshez/version'
|
2
5
|
require 'optparse'
|
3
6
|
require 'ostruct'
|
4
7
|
|
5
8
|
module Sshez
|
6
|
-
# Your code goes here...
|
7
|
-
|
8
|
-
|
9
|
-
class Params
|
10
|
-
|
11
|
-
#
|
12
|
-
# Return a structure describing the options.
|
13
|
-
#
|
14
|
-
def self.parse(args)
|
15
|
-
# The options specified on the command line will be collected in *options*.
|
16
|
-
# We set default values here.
|
17
|
-
options = OpenStruct.new
|
18
|
-
|
19
|
-
opt_parser = OptionParser.new do |opts|
|
20
|
-
opts.banner = "Usage: sshez alias (role@host|-r) [options]"
|
21
|
-
|
22
|
-
opts.separator ""
|
23
|
-
opts.separator "Specific options:"
|
24
|
-
|
25
|
-
# Mandatory argument.
|
26
|
-
opts.on("-p", "--port PORT",
|
27
|
-
"Specify a port") do |port|
|
28
|
-
options.port = port
|
29
|
-
end
|
30
|
-
|
31
|
-
# Optional argument; multi-line description.
|
32
|
-
opts.on("-i", "--identity_file [key]",
|
33
|
-
"Add identity") do |key_path|
|
34
|
-
options.identity_file = key_path
|
35
|
-
end
|
36
|
-
|
37
|
-
opts.on("-r", "--remove", "Remove handle") do
|
38
|
-
options.remove = true
|
39
|
-
end
|
40
|
-
|
41
|
-
opts.on("-t", "--test", "writes nothing") do
|
42
|
-
options.test = true
|
43
|
-
end
|
44
|
-
|
45
|
-
opts.separator ""
|
46
|
-
opts.separator "Common options:"
|
47
|
-
|
48
|
-
# No argument, shows at tail. This will print an options summary.
|
49
|
-
# Try it and see!
|
50
|
-
opts.on_tail("-h", "--help", "Show this message") do
|
51
|
-
puts opts
|
52
|
-
end
|
53
|
-
|
54
|
-
# Another typical switch to print the version.
|
55
|
-
opts.on_tail("--version", "Show version") do
|
56
|
-
puts ::Version.join('.')
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
opt_parser.parse!(args)
|
61
|
-
options
|
62
|
-
end # parse()
|
63
|
-
|
64
|
-
end # class Params
|
65
|
-
|
66
|
-
class ConfigFile
|
67
|
-
def self.append(name, user, host, options)
|
68
|
-
output = "Adding\n"
|
69
|
-
config_append = form(name, user, host, options)
|
70
|
-
output += "" + config_append
|
71
|
-
unless options.test
|
72
|
-
file_path = File.expand_path('~')+"/.ssh/config"
|
73
|
-
file = File.open(file_path, "a+")
|
74
|
-
file.write(config_append)
|
75
|
-
file.close
|
76
|
-
end
|
77
|
-
output += "to #{file_path}\n"
|
78
|
-
output += "try ssh #{name} \n"
|
79
|
-
|
80
|
-
output
|
81
|
-
end
|
82
|
-
|
83
|
-
def self.form(name, user, host, options)
|
84
|
-
retuned = "\n"
|
85
|
-
retuned += "Host #{name}\n"
|
86
|
-
retuned += " HostName #{host}\n"
|
87
|
-
retuned += " User #{user}\n"
|
88
|
-
|
89
|
-
if options.port
|
90
|
-
retuned += " Port #{options.port}\n"
|
91
|
-
end
|
92
|
-
|
93
|
-
if options.identity_file
|
94
|
-
retuned += " IdentityFile #{options.identity_file}\n"
|
95
|
-
end
|
96
|
-
retuned
|
97
|
-
|
98
|
-
end
|
99
|
-
|
100
|
-
def self.remove(name)
|
101
|
-
output = ""
|
102
|
-
started_removing = false
|
103
|
-
file_path = File.expand_path('~')+"/.ssh/config"
|
104
|
-
file = File.open(file_path, "r")
|
105
|
-
new_file = File.open(file_path+"temp", "w")
|
106
|
-
file.each do |line|
|
107
|
-
if line.include?("Host #{name}")|| started_removing
|
108
|
-
if started_removing && line.include?("Host ") && !line.include?(name)
|
109
|
-
started_removing = false
|
110
|
-
else
|
111
|
-
output += line
|
112
|
-
started_removing = true
|
113
|
-
end
|
114
|
-
else
|
115
|
-
new_file.write(line)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
file.close
|
119
|
-
new_file.close
|
120
|
-
File.delete(file_path)
|
121
|
-
File.rename(file_path+"temp", file_path)
|
122
|
-
|
123
|
-
if output.empty?
|
124
|
-
return "could not find host (#{name})"
|
125
|
-
else
|
126
|
-
return output
|
127
|
-
end
|
128
|
-
|
129
|
-
end
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
end
|
134
|
-
|
135
|
-
class Exec
|
136
|
-
|
137
|
-
def process(args)
|
138
|
-
# parse the params to get the options
|
139
|
-
if (args.length < 2 || !args[1].include?("@") || args[0][0] == '-')
|
140
|
-
if args[0] == "-h"
|
141
|
-
Params.parse(args)
|
142
|
-
return nil
|
143
|
-
elsif ['-r', "--remove"].include?(args[1])
|
144
|
-
return ConfigFile.remove(args[0])
|
145
|
-
end
|
146
|
-
output = %Q|Invalid input
|
147
|
-
Use -h for help|
|
148
|
-
return output
|
149
|
-
end
|
150
|
-
options = Params.parse(args)
|
151
|
-
|
152
|
-
|
153
|
-
unless options.remove
|
154
|
-
user, host = args[1].split("@")
|
155
|
-
output = ConfigFile.append(args[0], user, host, options)
|
156
|
-
output + "Done!"
|
157
|
-
end
|
158
|
-
|
159
|
-
end
|
160
9
|
|
10
|
+
def self.version
|
11
|
+
return Sshez::VERSION
|
161
12
|
end
|
162
|
-
|
163
13
|
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
module Sshez
|
2
|
+
class ConfigFile
|
3
|
+
FILE_PATH = File.expand_path('~') + "/.ssh/config"
|
4
|
+
|
5
|
+
def self.append(name, user, host, options)
|
6
|
+
output = "Adding\n"
|
7
|
+
config_append = form(name, user, host, options)
|
8
|
+
output += config_append
|
9
|
+
unless options.test
|
10
|
+
file = File.open(FILE_PATH, "a+")
|
11
|
+
file.write(config_append)
|
12
|
+
file.close
|
13
|
+
puts "Successfully added `#{name}` as an alias for `#{user}@#{host}`"
|
14
|
+
system "chmod 600 #{FILE_PATH}"
|
15
|
+
end
|
16
|
+
output += "to #{FILE_PATH}\n"
|
17
|
+
output += "try ssh #{name} \n"
|
18
|
+
|
19
|
+
output
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.form(name, user, host, options)
|
23
|
+
retuned = "\n"
|
24
|
+
retuned += "Host #{name}\n"
|
25
|
+
retuned += " HostName #{host}\n"
|
26
|
+
retuned += " User #{user}\n"
|
27
|
+
|
28
|
+
options.file_content.each_pair do |key, value|
|
29
|
+
retuned += value
|
30
|
+
end
|
31
|
+
retuned
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.remove(name)
|
36
|
+
output = ""
|
37
|
+
started_removing = false
|
38
|
+
file = File.open(FILE_PATH, "r")
|
39
|
+
new_file = File.open(FILE_PATH+"temp", "w")
|
40
|
+
file.each do |line|
|
41
|
+
if line.include?("Host #{name}")|| started_removing
|
42
|
+
if started_removing && line.include?("Host ") && !line.include?(name)
|
43
|
+
started_removing = false
|
44
|
+
else
|
45
|
+
output += line
|
46
|
+
started_removing = true
|
47
|
+
end
|
48
|
+
else
|
49
|
+
new_file.write(line)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
file.close
|
53
|
+
new_file.close
|
54
|
+
File.delete(FILE_PATH)
|
55
|
+
File.rename(FILE_PATH + "temp", FILE_PATH)
|
56
|
+
system "chmod 600 #{FILE_PATH}"
|
57
|
+
|
58
|
+
if output.empty?
|
59
|
+
return "could not find host (#{name})"
|
60
|
+
else
|
61
|
+
return output
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.list
|
66
|
+
file = File.open(FILE_PATH, "r")
|
67
|
+
servers = []
|
68
|
+
file.each do |line|
|
69
|
+
if line.include?("Host ")
|
70
|
+
servers << line.sub('Host', '')
|
71
|
+
end
|
72
|
+
end
|
73
|
+
file.close
|
74
|
+
if servers.empty?
|
75
|
+
puts "No aliases added"
|
76
|
+
else
|
77
|
+
puts "Listing aliases:"
|
78
|
+
servers.each{|x| puts "\t- #{x}"}
|
79
|
+
end
|
80
|
+
return servers.join(',')
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
data/lib/sshez/exec.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
module Sshez
|
2
|
+
class Exec
|
3
|
+
def process(args)
|
4
|
+
# parse the params to get the options
|
5
|
+
if args.length == 0
|
6
|
+
args[0] = '-h'
|
7
|
+
elsif args[0] == 'list'
|
8
|
+
return ConfigFile.list
|
9
|
+
elsif args[0] == 'remove'
|
10
|
+
if args[1]
|
11
|
+
return ConfigFile.remove(args[1])
|
12
|
+
else
|
13
|
+
output %Q|Select an alias to remove `sshez remove alias`.\n Use `sshez list` to list your aliases|
|
14
|
+
puts output
|
15
|
+
return output
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
if (args.length < 2 || !args[1].include?("@") || args[0][0] == '-')
|
20
|
+
if args.any? { |x| ['-h', '--help', '-l', '--list'].include?(x) }
|
21
|
+
Params.parse(args)
|
22
|
+
return
|
23
|
+
elsif ['-r', "--remove"].include?(args[1])
|
24
|
+
return ConfigFile.remove(args[0])
|
25
|
+
elsif ['-v', '--version'].include?(args[0])
|
26
|
+
puts Sshez.version
|
27
|
+
return Sshez.version
|
28
|
+
end
|
29
|
+
output = %Q|Invalid input. Use -h for help|
|
30
|
+
puts output
|
31
|
+
return output
|
32
|
+
end
|
33
|
+
options = Params.parse(args)
|
34
|
+
|
35
|
+
unless options.remove
|
36
|
+
user, host = args[1].split("@")
|
37
|
+
output = ConfigFile.append(args[0], user, host, options)
|
38
|
+
output + "Done!"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/sshez/params.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
module Sshez
|
2
|
+
class Params
|
3
|
+
#
|
4
|
+
# Return a structure describing the options.
|
5
|
+
#
|
6
|
+
def self.parse(args)
|
7
|
+
# The options specified on the command line will be collected in *options*.
|
8
|
+
# We set default values here.
|
9
|
+
options = OpenStruct.new
|
10
|
+
options.file_content = OpenStruct.new
|
11
|
+
|
12
|
+
opt_parser = OptionParser.new do |opts|
|
13
|
+
opts.banner = "Usage:\n\tsshez <alias> (role@host|-r) [options]\n\tsshez remove <alias>\n\tsshez list"
|
14
|
+
|
15
|
+
opts.separator ""
|
16
|
+
opts.separator "Specific options:"
|
17
|
+
|
18
|
+
# Mandatory argument.
|
19
|
+
opts.on("-p", "--port PORT",
|
20
|
+
"Specify a port") do |port|
|
21
|
+
options.port = port
|
22
|
+
options.file_content.port_text = " Port #{options.port}\n"
|
23
|
+
end
|
24
|
+
|
25
|
+
# Optional argument; multi-line description.
|
26
|
+
opts.on("-i", "--identity_file [key]",
|
27
|
+
"Add identity") do |key_path|
|
28
|
+
options.identity_file = key_path
|
29
|
+
options.file_content.identity_file_text = " IdentityFile #{options.identity_file}\n"
|
30
|
+
end
|
31
|
+
|
32
|
+
opts.on("-r", "--remove", "Remove handle") do
|
33
|
+
options.remove = true
|
34
|
+
end
|
35
|
+
|
36
|
+
opts.on("-t", "--test", "Writes nothing") do
|
37
|
+
options.test = true
|
38
|
+
end
|
39
|
+
|
40
|
+
opts.separator ""
|
41
|
+
opts.separator "Common options:"
|
42
|
+
|
43
|
+
opts.on("-l", "--list", "List aliases") do
|
44
|
+
Sshez::ConfigFile.list
|
45
|
+
return
|
46
|
+
end
|
47
|
+
|
48
|
+
# Another typical switch to print the version.
|
49
|
+
opts.on("-v", "--version", "Show version") do
|
50
|
+
puts Sshez.version
|
51
|
+
return
|
52
|
+
end
|
53
|
+
|
54
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
55
|
+
puts opts
|
56
|
+
puts "\n"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
opt_parser.parse!(args)
|
61
|
+
options
|
62
|
+
end # parse()
|
63
|
+
end # class Params
|
64
|
+
end
|
data/lib/sshez/version.rb
CHANGED
data/spec/spec_helper.rb
ADDED
data/spec/sshez_spec.rb
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sshez do
|
4
|
+
|
5
|
+
subject { Sshez::Exec.new }
|
6
|
+
it 'has a version number' do
|
7
|
+
expect(Sshez::VERSION).not_to be nil
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#process' do
|
11
|
+
let(:input) { 'google root@74.125.224.72 -p 80 -t' }
|
12
|
+
let(:output) { subject.process(input.split(" ")) }
|
13
|
+
|
14
|
+
it 'begins with what it does' do
|
15
|
+
expect(output).to start_with "Adding"
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'prints what it appends' do
|
19
|
+
expect(output).to match /Host google/i
|
20
|
+
expect(output).to match /HostName 74.125.224.72/i
|
21
|
+
expect(output).to match /Port 80/i
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'always appends "Done" if succeeds' do
|
25
|
+
expect(output).to end_with 'Done!'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "fails" do
|
30
|
+
let(:input) { 'root@74.125.224.72' }
|
31
|
+
let(:output) { subject.process(input.split(" ")) }
|
32
|
+
|
33
|
+
it 'and printes start' do
|
34
|
+
expect(output).to start_with "Invalid input"
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'and then asks for help at the end' do
|
38
|
+
expect(output).to end_with 'Use -h for help'
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "help works" do
|
44
|
+
let(:input) { '-h' }
|
45
|
+
let(:output) { subject.process(input.split(" ")) }
|
46
|
+
|
47
|
+
it 'prints but outputs nothing' do
|
48
|
+
expect(output).to eq nil
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "remove" do
|
53
|
+
before { subject.process(%w{google root@74.12.32.42 -p 30}) }
|
54
|
+
let(:input) { "google -r" }
|
55
|
+
let(:output) { subject.process(input.split(" ")) }
|
56
|
+
|
57
|
+
it 'ends with 30' do
|
58
|
+
expect(output).to end_with "30\n"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "list works" do
|
63
|
+
before { subject.process(%w{google root@74.12.32.42 -p 30}) }
|
64
|
+
let(:input) { "list" }
|
65
|
+
let(:output) { subject.process(input.split(" ")) }
|
66
|
+
after { subject.process(%w{google -r}) }
|
67
|
+
|
68
|
+
it 'contains added alias' do
|
69
|
+
expect(output).to end_with "google\n"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "version works" do
|
74
|
+
let(:input) { "-v" }
|
75
|
+
let(:output) { subject.process(input.split(" ")) }
|
76
|
+
|
77
|
+
it 'matches gem version' do
|
78
|
+
expect(output).to end_with "#{Sshez.version}"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
data/sshez.gemspec
CHANGED
@@ -6,22 +6,21 @@ require 'sshez/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "sshez"
|
8
8
|
spec.version = Sshez::VERSION
|
9
|
-
spec.authors = ["Immortal Friday"]
|
10
|
-
spec.email = ["khaled.gomaa.90@gmail.com"]
|
9
|
+
spec.authors = ["Immortal Friday", "Oss"]
|
10
|
+
spec.email = ["khaled.gomaa.90@gmail.com", "mohamed.o.alnagdy@gmail.com"]
|
11
11
|
|
12
12
|
spec.summary = %q{Easy ssh config handling}
|
13
|
-
spec.description = %q{
|
14
|
-
Allowing you to add aliases
|
13
|
+
spec.description = %q{No more remembering ips users or ports! Sshez interfaces your ssh config file
|
14
|
+
Allowing you to add aliases for your ssh connections to easily access them.}
|
15
15
|
spec.homepage = "https://github.com/GomaaK/sshez"
|
16
16
|
spec.license = "MIT"
|
17
17
|
|
18
|
-
|
19
18
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
20
|
-
spec.
|
19
|
+
spec.test_files = Dir["spec/**/*"]
|
21
20
|
spec.require_paths = ["lib"]
|
21
|
+
spec.executables = ["sshez"]
|
22
22
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.10"
|
24
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
25
|
-
spec.add_development_dependency "rspec"
|
26
|
-
|
25
|
+
spec.add_development_dependency "rspec", "~> 3.4"
|
27
26
|
end
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sshez
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Immortal Friday
|
8
|
+
- Oss
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
12
|
+
date: 2015-12-14 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
@@ -42,21 +43,22 @@ dependencies:
|
|
42
43
|
name: rspec
|
43
44
|
requirement: !ruby/object:Gem::Requirement
|
44
45
|
requirements:
|
45
|
-
- - "
|
46
|
+
- - "~>"
|
46
47
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
48
|
+
version: '3.4'
|
48
49
|
type: :development
|
49
50
|
prerelease: false
|
50
51
|
version_requirements: !ruby/object:Gem::Requirement
|
51
52
|
requirements:
|
52
|
-
- - "
|
53
|
+
- - "~>"
|
53
54
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
55
|
+
version: '3.4'
|
55
56
|
description: |-
|
56
|
-
|
57
|
-
Allowing you to add aliases
|
57
|
+
No more remembering ips users or ports! Sshez interfaces your ssh config file
|
58
|
+
Allowing you to add aliases for your ssh connections to easily access them.
|
58
59
|
email:
|
59
60
|
- khaled.gomaa.90@gmail.com
|
61
|
+
- mohamed.o.alnagdy@gmail.com
|
60
62
|
executables:
|
61
63
|
- sshez
|
62
64
|
extensions: []
|
@@ -65,6 +67,7 @@ files:
|
|
65
67
|
- ".gitignore"
|
66
68
|
- ".rspec"
|
67
69
|
- ".travis.yml"
|
70
|
+
- CHANGELOG.md
|
68
71
|
- CODE_OF_CONDUCT.md
|
69
72
|
- Gemfile
|
70
73
|
- LICENSE
|
@@ -75,7 +78,12 @@ files:
|
|
75
78
|
- bin/setup
|
76
79
|
- bin/sshez
|
77
80
|
- lib/sshez.rb
|
81
|
+
- lib/sshez/config_file.rb
|
82
|
+
- lib/sshez/exec.rb
|
83
|
+
- lib/sshez/params.rb
|
78
84
|
- lib/sshez/version.rb
|
85
|
+
- spec/spec_helper.rb
|
86
|
+
- spec/sshez_spec.rb
|
79
87
|
- sshez.gemspec
|
80
88
|
- tasks/rspec.rake
|
81
89
|
homepage: https://github.com/GomaaK/sshez
|
@@ -102,4 +110,6 @@ rubygems_version: 2.4.5
|
|
102
110
|
signing_key:
|
103
111
|
specification_version: 4
|
104
112
|
summary: Easy ssh config handling
|
105
|
-
test_files:
|
113
|
+
test_files:
|
114
|
+
- spec/sshez_spec.rb
|
115
|
+
- spec/spec_helper.rb
|