ssh-manager 1.0.7 → 1.1.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/lib/ssh/manager/ask.sh +10 -0
- data/lib/ssh/manager/cli.rb +126 -106
- data/lib/ssh/manager/client.rb +27 -17
- data/lib/ssh/manager/db.rb +39 -15
- data/lib/ssh/manager/version.rb +1 -1
- metadata +3 -3
- data/config/sshm.db +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56dbc7d6e9248cc66a7a3840669ffc4cf0056555
|
4
|
+
data.tar.gz: 54cae9ac4705336ad6dbbb39628cb18003d101c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e15cc62eb68e761da4214faa7b1e5b4191aef724436386b045e593cfc7b8ed7fc4bf67481d599b2550aaeed28fb3849f1bc161c30e0c36fe763f444b67ea8ec2
|
7
|
+
data.tar.gz: 603a5b658f4db6f72a9725448f53f671fd09bfb875c9c7c19baeaee71db7d11e742700f979b28b3b5b0672302e5309a85d6be7c4180626aa3a8c033d7fb94089
|
data/lib/ssh/manager/cli.rb
CHANGED
@@ -12,44 +12,58 @@ module SSH
|
|
12
12
|
|
13
13
|
def initialize(opts = {})
|
14
14
|
@options = opts
|
15
|
+
@pretty_names = {:id => "ID", #TODO :connect_via
|
16
|
+
:ip => "IP or hostname",
|
17
|
+
:user => "Username",
|
18
|
+
:hostname => "Alias",
|
19
|
+
:port => "Port",
|
20
|
+
:note => "Note",
|
21
|
+
:options => "Options",
|
22
|
+
:group => "Group",
|
23
|
+
:connect_via => "Connect via (id)"}
|
24
|
+
@visible_fields = [:id, :ip, :group, :note]
|
25
|
+
@input_fields = [:ip, :hostname, :user, :port, :options, :note, :group, :connect_via]
|
26
|
+
@column_width = 15 #TODO make this dynamic or a yaml setting
|
15
27
|
end
|
16
28
|
|
17
|
-
def
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
+
def connect_to(id)
|
30
|
+
id.each do |conn|
|
31
|
+
conn.to_i
|
32
|
+
ssh_command = ""
|
33
|
+
i = conn
|
34
|
+
begin
|
35
|
+
connection = DATABASE.get_connection_by_id(i)
|
36
|
+
ip = connection[:ip]
|
37
|
+
user = connection[:user]
|
38
|
+
user = ENV['USER'] if user == ""
|
39
|
+
options = connection[:options]
|
40
|
+
via = connection[:connect_via]
|
41
|
+
ssh_command = "ssh -A -t #{options} #{user}@#{ip} #{ssh_command}"
|
42
|
+
i = via
|
43
|
+
#TODO prevent endless via-loops
|
44
|
+
end while via
|
45
|
+
connection[:count] += 1
|
46
|
+
connection[:last_time] = Time.now
|
47
|
+
DATABASE.update_connection(connection)
|
48
|
+
if CONFIG['target'] == "self"
|
49
|
+
exec ssh_command
|
50
|
+
elsif CONFIG['terminal'] == "xfce4-terminal" || CONFIG['terminal'] == "gnome-terminal"
|
51
|
+
if CONFIG['tabbed'] == 'true'
|
52
|
+
command = "--title=#{user}@#{ip} --tab --command="
|
53
|
+
else
|
54
|
+
command = "--title=#{user}@#{ip} --command="
|
55
|
+
end
|
56
|
+
#TODO: add title --title='connection name to identify '
|
57
|
+
#TODO: bug when no terminal is open => wants to open 2 terms
|
58
|
+
#TODO: dnslookup
|
59
|
+
%x(#{CONFIG['terminal']} #{command}"#{ssh_command}")
|
60
|
+
elsif CONFIG['terminal'] == "xterm" || CONFIG['terminal'] == "urxvt"
|
61
|
+
%x(#{CONFIG['terminal']} -e "#{ssh_command}")
|
29
62
|
else
|
30
|
-
|
63
|
+
puts "We dont support #{CONFIG['terminal']} right now"
|
64
|
+
puts 'Check Github for further development or contributing'
|
31
65
|
end
|
32
|
-
elsif CONFIG['terminal'] == "xterm" || CONFIG['terminal'] == "urxvt"
|
33
|
-
%x(#{CONFIG['terminal']} -e "ssh #{user}@#{ip}")
|
34
|
-
else
|
35
|
-
puts "We dont support #{CONFIG['terminal']} right now"
|
36
|
-
puts 'Check Github for further development or contributing'
|
37
66
|
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def connect_to(id)
|
41
|
-
via = DATABASE.get_connection_data[id.to_i-1][-1] =~ /@/
|
42
|
-
if via.nil?
|
43
|
-
@ip = DATABASE.get_connection_data[id.to_i-1][0]
|
44
|
-
@user = DATABASE.get_connection_data[id.to_i-1][1]
|
45
|
-
check_term(@ip, @user, via)
|
46
|
-
else
|
47
|
-
@ip = DATABASE.get_connection_data[id.to_i-1][0]
|
48
|
-
@user = DATABASE.get_connection_data[id.to_i-1][1]
|
49
|
-
via = DATABASE.get_connection_data[id.to_i-1][-1]
|
50
|
-
check_term(@ip, @user, via)
|
51
|
-
end
|
52
|
-
#TODO: check for options
|
53
67
|
#TODO: if db[secure_login] = false => http://linuxcommando.blogspot.de/2008/10/how-to-disable-ssh-host-key-checking.html
|
54
68
|
end
|
55
69
|
|
@@ -59,119 +73,125 @@ module SSH
|
|
59
73
|
if new_version<old_version
|
60
74
|
puts "There is a update available #{new_version} was released. -> sudo gem update ssh-manager"
|
61
75
|
else
|
62
|
-
|
76
|
+
puts "Version: #{old_version} is up to date."
|
63
77
|
end
|
64
78
|
end
|
65
79
|
|
80
|
+
def show_info(id)
|
81
|
+
@input_fields << :count
|
82
|
+
@input_fields << :last_time
|
83
|
+
id.each do |conn|
|
84
|
+
connections = DATABASE.get_connection_by_id(conn.to_i)
|
85
|
+
puts "\n"
|
86
|
+
@input_fields.each do |field|
|
87
|
+
if field == :connect_via && connections[field] != nil
|
88
|
+
via_ip = DATABASE.get_connection_by_id(connections[field])[:ip]
|
89
|
+
printf "%s: %s -|- %s ", field, connections[field], via_ip
|
90
|
+
else
|
91
|
+
printf "%s: %s", field, connections[field]
|
92
|
+
end
|
93
|
+
puts "\n"
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def transfer_key(id)
|
99
|
+
#TODO connect_via
|
100
|
+
#TODO options
|
101
|
+
connection = DATABASE.get_connection_by_id(id)
|
102
|
+
user = connection[:user]
|
103
|
+
user = ENV['USER'] if user == ""
|
104
|
+
%x(ssh-copy-id #{user}@#{connection[:ip]})
|
105
|
+
end
|
106
|
+
|
66
107
|
def ping(id)
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
108
|
+
connection = DATABASE.get_connection_by_id(id)
|
109
|
+
if connection[:connect_via]
|
110
|
+
connect_via = DATABASE.get_connection_by_id(connection[:connect_via])
|
111
|
+
ssh = "ssh #{connect_via[:user]}@#{connect_via[:ip]}"
|
112
|
+
exec("#{ssh} ping #{connection[:ip]} -c 3")
|
71
113
|
else
|
72
|
-
|
73
|
-
exec("ssh #{via} ping #{@ip}")
|
114
|
+
exec("ping #{connection[:ip]} -c 3")
|
74
115
|
end
|
75
116
|
end
|
76
117
|
|
77
|
-
def
|
78
|
-
|
79
|
-
|
80
|
-
%x(ssh-copy-id #{@user}@#{@ip})
|
118
|
+
def test(type)
|
119
|
+
require 'byebug'
|
120
|
+
byebug
|
81
121
|
end
|
82
122
|
|
83
123
|
def transfer_file(filename, id='', dest_path="/home/#{user}/")
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
124
|
+
#TODO connect_via
|
125
|
+
#TODO options
|
126
|
+
connection = DATABASE.get_connection_by_id(id)
|
127
|
+
user = connection[:user]
|
128
|
+
user = ENV['USER'] if user == ""
|
129
|
+
%x(scp #{filename} #{user}@#{connection[:ip]}:#{dest_path}) if File.file?(filename)
|
130
|
+
%x(scp -r #{filename} #{@user}@#{connection[:ip]}:#{dest_path}) if File.directory?(filename)
|
88
131
|
end
|
89
132
|
|
90
|
-
def add_connection
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
options = '' if options == ''
|
104
|
-
puts 'Group: '
|
105
|
-
group = $stdin.gets.chomp
|
106
|
-
puts 'Connect via(ip): '
|
107
|
-
connect_via_ip = $stdin.gets.chomp
|
108
|
-
puts 'With Username: '
|
109
|
-
connect_via_user = $stdin.gets.chomp
|
110
|
-
connect_via = ""
|
111
|
-
connect_via= "#{connect_via_user}@#{connect_via_ip}" unless connect_via_user.empty?
|
112
|
-
count = 0
|
113
|
-
created_at = Time.now.to_s
|
114
|
-
last_time = Time.now.to_s
|
115
|
-
DATABASE.add_new_connection(ip, user, hostname, port, note, connect_via, created_at, options, count, group, last_time)
|
133
|
+
def add_connection
|
134
|
+
connection = {:user => ENV['USER'],
|
135
|
+
:port => "22"}
|
136
|
+
@input_fields.each do |key|
|
137
|
+
#TODO make this a method
|
138
|
+
connection[key] = %x{source #{File.dirname(__FILE__)}/ask.sh; ask '#{@pretty_names[key]}' '#{connection[key]}'}.chomp
|
139
|
+
end
|
140
|
+
connection[:count] = 0
|
141
|
+
connection[:created_at] = Time.now.to_s
|
142
|
+
connection[:last_time] = Time.now.to_s
|
143
|
+
connection[:connect_via] = nil if connection[:connect_via] == ""
|
144
|
+
DATABASE.add_new_connection(connection)
|
145
|
+
#TODO catch SQLite3::ConstraintException
|
116
146
|
end
|
117
147
|
|
118
148
|
def delete(id)
|
119
|
-
id
|
120
|
-
|
149
|
+
id.each do |conn|
|
150
|
+
conn.to_i
|
151
|
+
DATABASE.delete_connection(conn)
|
152
|
+
end
|
121
153
|
end
|
122
154
|
|
123
155
|
def list_all
|
124
|
-
|
125
|
-
|
126
|
-
puts
|
127
|
-
connections.each do |
|
128
|
-
|
129
|
-
x[1].each do |a|
|
130
|
-
printf '%-15s', a
|
131
|
-
end
|
156
|
+
connections = DATABASE.get_connection_data
|
157
|
+
@visible_fields.each { |f| printf "%-#{@column_width}s", @pretty_names[f] }
|
158
|
+
puts "\n"
|
159
|
+
connections.each do |c|
|
160
|
+
@visible_fields.each { |f| printf "%-#{@column_width}s", c[f] }
|
132
161
|
puts "\n"
|
133
162
|
end
|
134
163
|
end
|
135
164
|
|
136
165
|
def update(id)
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
port = $stdin.gets.chomp
|
146
|
-
port = DATABASE.get_connection_data[id.to_i][3] if port == ''
|
147
|
-
puts 'Notes: '
|
148
|
-
note = $stdin.gets.chomp
|
149
|
-
note = DATABASE.get_connection_data[id.to_i][4] if note == ''
|
150
|
-
DATABASE.update_connection(DATABASE.get_connection_data[id.to_i][0], user, hostname, port, note)
|
166
|
+
connection = DATABASE.get_connection_by_id(id)
|
167
|
+
@input_fields.each do |key|
|
168
|
+
#TODO make this a method
|
169
|
+
connection[key] = %x{source #{File.dirname(__FILE__)}/ask.sh; ask '#{@pretty_names[key]}' '#{connection[key]}'}.chomp
|
170
|
+
end
|
171
|
+
connection[:connect_via] = nil if connection[:connect_via] == ""
|
172
|
+
DATABASE.update_connection(connection)
|
173
|
+
#TODO catch SQLite3::ConstraintException
|
151
174
|
end
|
152
175
|
|
153
176
|
def search_for(term)
|
154
|
-
puts
|
177
|
+
puts "All results for searchterm: #{term}"
|
178
|
+
@visible_fields.each { |f| printf "%-#{@column_width}s", @pretty_names[f] }
|
179
|
+
print "\n"
|
155
180
|
DATABASE.search_for(term).each do |x|
|
156
181
|
x.all.each do |cons|
|
157
|
-
|
158
|
-
printf '%-20s', each_con
|
159
|
-
end
|
182
|
+
@visible_fields.each { |f| printf "%-#{@column_width}s", cons[f] }
|
160
183
|
puts "\n"
|
161
184
|
end
|
162
185
|
end
|
163
|
-
puts "All results for searchterm: #{term}"
|
164
186
|
end
|
165
187
|
|
166
188
|
def multiple_connection(term)
|
167
189
|
DATABASE.search_for(term).each do |x|
|
168
190
|
x.all.each do |dataset|
|
169
|
-
|
170
|
-
#TODO: Add terminalposition
|
191
|
+
self.connect_to(dataset[:id])
|
171
192
|
end
|
172
193
|
end
|
173
194
|
end
|
174
|
-
|
175
195
|
end
|
176
196
|
end
|
177
197
|
end
|
data/lib/ssh/manager/client.rb
CHANGED
@@ -18,15 +18,24 @@ module SSH
|
|
18
18
|
|
19
19
|
def execute!
|
20
20
|
cli = SSH::Manager::Cli
|
21
|
+
# TODO id.to_i is not good enough. we want to support hostnames too
|
22
|
+
# Checking and casting in the methods itself could solve the problem
|
23
|
+
# futhermore this could reside in a separate method
|
21
24
|
if @options[:add]
|
22
25
|
puts 'Adding ..'
|
23
|
-
cli.new(@options).add_connection
|
26
|
+
cli.new(@options).add_connection
|
24
27
|
elsif @options[:connect]
|
25
28
|
puts 'Connecting ..'
|
26
29
|
cli.new(@options).connect_to(@options[:connect])
|
30
|
+
elsif @options[:info]
|
31
|
+
puts 'Printing info ..'
|
32
|
+
cli.new(@options).show_info(@options[:info])
|
27
33
|
elsif @options[:transfer_file]
|
28
34
|
puts 'Transfering file..'
|
29
|
-
cli.new(@options).transfer_file(@options[:transfer_file], @argv[2], @argv[3])
|
35
|
+
cli.new(@options).transfer_file(@options[:transfer_file].to_i, @argv[2], @argv[3])
|
36
|
+
elsif @options[:ping]
|
37
|
+
puts 'Pinging..'
|
38
|
+
cli.new(@options).ping(@options[:ping].to_i)
|
30
39
|
elsif @options[:delete]
|
31
40
|
puts 'Deleting ..'
|
32
41
|
cli.new(@options).delete(@options[:delete])
|
@@ -38,16 +47,13 @@ module SSH
|
|
38
47
|
cli.new(@options).update_available
|
39
48
|
elsif @options[:update]
|
40
49
|
puts 'Updating ..'
|
41
|
-
cli.new(@options).update(@options[:update])
|
50
|
+
cli.new(@options).update(@options[:update].to_i)
|
42
51
|
elsif @options[:multi]
|
43
52
|
puts 'Connecting to multiple ips..'
|
44
53
|
cli.new(@options).multiple_connection(@options[:multi])
|
45
54
|
elsif @options[:transfer_key]
|
46
55
|
puts 'Transfering key..'
|
47
|
-
cli.new(@options).transfer_key(@options[:transfer_key])
|
48
|
-
elsif @options[:ping]
|
49
|
-
puts 'Ping Pong..'
|
50
|
-
cli.new(@options).ping(@options[:ping])
|
56
|
+
cli.new(@options).transfer_key(@options[:transfer_key].to_i)
|
51
57
|
elsif @options[:search]
|
52
58
|
puts 'Searching ..'
|
53
59
|
cli.new(@options).search_for(@options[:search])
|
@@ -65,27 +71,31 @@ module SSH
|
|
65
71
|
@optparse = OptionParser.new do |opts|
|
66
72
|
opts.banner = "Usage: sshm [options] ..."
|
67
73
|
@options[:add] = false
|
68
|
-
opts.on( '-a', '--add
|
69
|
-
@options[:add] =
|
74
|
+
opts.on( '-a', '--add', 'add a new connection' ) do
|
75
|
+
@options[:add] = true
|
70
76
|
end
|
71
77
|
@options[:transfer_key] = false
|
72
78
|
opts.on( '-t', '--transferkey id', 'transfer key to <id>' ) do |opt|
|
73
79
|
@options[:transfer_key] = opt
|
74
80
|
end
|
75
|
-
@options[:ping] = false
|
76
|
-
opts.on( '-p', '--ping connection id', 'ping connection/)' ) do |opt|
|
77
|
-
@options[:ping] = opt
|
78
|
-
end
|
79
81
|
@options[:transfer_file] = false
|
80
82
|
opts.on( '-r', '--transferfile filename', 'file or dir / connection_ID / dest_path(default is /home/user/)' ) do |opt|
|
81
83
|
@options[:transfer_file] = opt
|
82
84
|
end
|
83
85
|
@options[:connect] = false
|
84
|
-
opts.on( '-c', '--connect
|
86
|
+
opts.on( '-c', '--connect x y z', Array, 'connect to <ids>' ) do |opt|
|
85
87
|
@options[:connect] = opt
|
86
88
|
end
|
89
|
+
@options[:info] = false
|
90
|
+
opts.on( '-i', '--info id1 id2 id3',Array, 'info about to <id>' ) do |opt|
|
91
|
+
@options[:info] = opt
|
92
|
+
end
|
93
|
+
@options[:ping] = false
|
94
|
+
opts.on( '-p', '--ping id', 'test connection of <id>' ) do |opt|
|
95
|
+
@options[:ping] = opt
|
96
|
+
end
|
87
97
|
@options[:delete] = false
|
88
|
-
opts.on( '-d', '--delete
|
98
|
+
opts.on( '-d', '--delete id1 id2 id3',Array, 'delete connection <ids>' ) do |opt|
|
89
99
|
@options[:delete] = opt
|
90
100
|
end
|
91
101
|
@options[:update] = false
|
@@ -108,11 +118,11 @@ module SSH
|
|
108
118
|
opts.on( '-g', '--upgrade', 'checks for upgrade' ) do
|
109
119
|
@options[:upgrade] = true
|
110
120
|
end
|
111
|
-
opts.on( '-h', '--help', '
|
121
|
+
opts.on( '-h', '--help', 'display this screen' ) do
|
112
122
|
puts opts
|
113
123
|
exit
|
114
124
|
end
|
115
|
-
opts.on( '-v', '--version', '
|
125
|
+
opts.on( '-v', '--version', 'print programs version' ) do
|
116
126
|
puts SSH::Manager::VERSION
|
117
127
|
exit
|
118
128
|
end
|
data/lib/ssh/manager/db.rb
CHANGED
@@ -5,41 +5,65 @@ module SSH
|
|
5
5
|
module Manager
|
6
6
|
class Database
|
7
7
|
|
8
|
-
|
9
|
-
FileUtils.
|
8
|
+
@config_dir = "#{ENV['HOME']}/.config/sshm"
|
9
|
+
FileUtils.mkdir_p(@config_dir) unless Dir.exists?(@config_dir)
|
10
10
|
|
11
|
-
@
|
12
|
-
|
11
|
+
@database_file = "#{@config_dir}/sshm.sqlite3"
|
12
|
+
unless File.exists?(@database_file)
|
13
|
+
Sequel.sqlite(@database_file).run <<-NEW_DB
|
14
|
+
CREATE TABLE connection (
|
15
|
+
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
|
16
|
+
"ip" TEXT,
|
17
|
+
"user" TEXT,
|
18
|
+
"hostname" TEXT,
|
19
|
+
"port" INTEGER,
|
20
|
+
"note" TEXT,
|
21
|
+
"created_at" TEXT,
|
22
|
+
"options" TEXT,
|
23
|
+
"group" TEXT,
|
24
|
+
"count" INTEGER,
|
25
|
+
"last_time" TEXT,
|
26
|
+
"secure_check" INTEGER,
|
27
|
+
"connect_via" INTEGER NULL,
|
28
|
+
FOREIGN KEY("connect_via") REFERENCES connection("id")
|
29
|
+
);
|
30
|
+
|
31
|
+
INSERT INTO connection ("ip", "hostname") VALUES ("127.0.0.1", "localhost");
|
32
|
+
NEW_DB
|
33
|
+
#TODO make group a n:m relation to extra table
|
34
|
+
end
|
35
|
+
DATABASE = Sequel.sqlite(@database_file)
|
13
36
|
|
14
37
|
attr_accessor :connections
|
15
38
|
|
16
39
|
def initialize
|
17
|
-
@connections= DATABASE
|
40
|
+
@connections = DATABASE[:connection]
|
41
|
+
end
|
42
|
+
|
43
|
+
def get_connection_by_id(id)
|
44
|
+
@connections[:id => id].to_hash
|
18
45
|
end
|
19
46
|
|
20
47
|
def get_connection_data
|
21
|
-
@connections.
|
48
|
+
@connections.all
|
22
49
|
end
|
23
50
|
|
24
|
-
def add_new_connection(
|
25
|
-
@connections.insert(
|
51
|
+
def add_new_connection(connection)
|
52
|
+
@connections.insert(connection)
|
26
53
|
end
|
27
54
|
|
28
|
-
def delete_connection(
|
29
|
-
|
30
|
-
@connections.where(:ip => ip).delete
|
55
|
+
def delete_connection(id)
|
56
|
+
@connections.where(:id => id).delete
|
31
57
|
end
|
32
58
|
|
33
|
-
def update_connection(
|
34
|
-
@connections.where(:
|
59
|
+
def update_connection(connection)
|
60
|
+
@connections.where(:id => connection[:id]).update(connection)
|
35
61
|
end
|
36
62
|
|
37
63
|
def search_for(term)
|
38
64
|
# check online: search for 'contains' not for complete matching
|
39
65
|
return @connections.where(:ip => term), @connections.where(:user => term), @connections.where(:hostname => term), @connections.where(:port => term), @connections.where(:note => term), @connections.where(:group => term), @connections.where(:options => term)
|
40
66
|
end
|
41
|
-
|
42
|
-
|
43
67
|
end
|
44
68
|
end
|
45
69
|
end
|
data/lib/ssh/manager/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ssh-manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joshua Schmid
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -88,9 +88,9 @@ files:
|
|
88
88
|
- Rakefile
|
89
89
|
- bin/sshm
|
90
90
|
- config/settings.yml
|
91
|
-
- config/sshm.db
|
92
91
|
- doc/user_spec
|
93
92
|
- lib/ssh/manager.rb
|
93
|
+
- lib/ssh/manager/ask.sh
|
94
94
|
- lib/ssh/manager/cli.rb
|
95
95
|
- lib/ssh/manager/client.rb
|
96
96
|
- lib/ssh/manager/db.rb
|
data/config/sshm.db
DELETED
Binary file
|