ssh-manager 1.1.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +4 -0
- data/Gemfile +1 -0
- data/lib/ssh/manager/cli.rb +102 -13
- data/lib/ssh/manager/client.rb +28 -12
- data/lib/ssh/manager/version.rb +1 -1
- metadata +2 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 42ad60fcccaaa39c9aa677635f50e8055d3f3114
|
4
|
+
data.tar.gz: fd87b518c5b286678ed6e8f9e1ee552c33a5c212
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed798fd1f65a2031fa3bb913afec5933c1a9e022568546bbe758386bf8d5a590323e5e020028a54ac20d75ba44c405fb90e47c4f67c1a07a23847b944cae80f6
|
7
|
+
data.tar.gz: f787cd59461fb2e13b259b6f4d7994871c04885c8048a41934c3135269d84a738049abee1a543afaf8efe7aff4fca83f7e054ef9f6a4d697a3d675b6b6f8613e
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/lib/ssh/manager/cli.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require_relative 'db'
|
2
|
+
require 'colorize'
|
3
|
+
require 'readline'
|
2
4
|
require 'yaml'
|
3
5
|
FileUtils.cp ("#{File.dirname(__FILE__)}/../../../config/settings.yml"), ("#{File.join(Dir.home)}" + '/.config/sshm/') unless File.exists?(("#{File.join(Dir.home)}" + '/.config/sshm/settings.yml'))
|
4
6
|
CONFIG = YAML.load_file("#{File.join(ENV['HOME'])}/.config/sshm/settings.yml")
|
@@ -106,14 +108,17 @@ module SSH
|
|
106
108
|
def transfer_key(id)
|
107
109
|
#TODO connect_via
|
108
110
|
#TODO options
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
111
|
+
id.each do |con|
|
112
|
+
connection = DATABASE.get_connection_by_id(con)
|
113
|
+
user = connection[:user]
|
114
|
+
user = ENV['USER'] if user == ""
|
115
|
+
%x(ssh-copy-id #{user}@#{connection[:ip]})
|
116
|
+
end
|
113
117
|
end
|
114
118
|
|
115
119
|
def ping(id)
|
116
|
-
|
120
|
+
id.each do |con|
|
121
|
+
connection = DATABASE.get_connection_by_id(con)
|
117
122
|
if connection[:connect_via]
|
118
123
|
connect_via = DATABASE.get_connection_by_id(connection[:connect_via])
|
119
124
|
ssh = "ssh #{connect_via[:user]}@#{connect_via[:ip]}"
|
@@ -121,8 +126,58 @@ module SSH
|
|
121
126
|
else
|
122
127
|
exec("ping #{connection[:ip]} -c 3")
|
123
128
|
end
|
129
|
+
end
|
124
130
|
end
|
131
|
+
|
132
|
+
def execute_command(id)
|
133
|
+
# id.first should be the command
|
134
|
+
cmd = id.shift
|
135
|
+
id.each do |con|
|
136
|
+
connection = DATABASE.get_connection_by_id(con)
|
137
|
+
if connection[:connect_via]
|
138
|
+
connect_via = DATABASE.get_connection_by_id(connection[:connect_via])
|
139
|
+
ssh = "ssh #{connect_via[:user]}@#{connect_via[:ip]}"
|
140
|
+
system("#{ssh} #{cmd}")
|
141
|
+
else
|
142
|
+
ssh = "ssh #{connection[:user]}@#{connection[:ip]}"
|
143
|
+
system("#{ssh} #{cmd}")
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
125
148
|
def test(id)
|
149
|
+
require 'byebug'
|
150
|
+
byebug
|
151
|
+
end
|
152
|
+
|
153
|
+
def settings
|
154
|
+
CONFIG.keys.each do |key|
|
155
|
+
puts "#{key}=#{CONFIG[key]}"
|
156
|
+
end
|
157
|
+
possible_options ={terminal: %w(xfce4-terminal gnome-terminal urxvt),
|
158
|
+
deletion_interval: %w(never), tabbed: %w(true false),
|
159
|
+
self: %w(true false)}
|
160
|
+
|
161
|
+
# change tabbed to mode %w(tabbed whatelse)
|
162
|
+
print "Want to change? (y/n)"
|
163
|
+
answer = STDIN.gets.chomp
|
164
|
+
comp = proc { |s| possible_options.values.flatten.grep(/^#{Regexp.escape(s)}/) }
|
165
|
+
Readline.completion_append_character = " "
|
166
|
+
Readline.completion_proc = comp
|
167
|
+
if answer == "y"
|
168
|
+
CONFIG.keys.each do |key|
|
169
|
+
puts "#{key}:".colorize(:green)
|
170
|
+
puts "possible options are: #{possible_options[key.to_sym]}"
|
171
|
+
puts "leave blank to not make any changes (TAB-Completion avalaible)"
|
172
|
+
input = Readline.readline('> ', true)
|
173
|
+
CONFIG[key] = input if input != ""
|
174
|
+
end
|
175
|
+
File.open(("#{File.join(ENV['HOME'])}/.config/sshm/settings.yml"),'w') do |h|
|
176
|
+
h.write CONFIG.to_yaml
|
177
|
+
end
|
178
|
+
else
|
179
|
+
exit
|
180
|
+
end
|
126
181
|
end
|
127
182
|
|
128
183
|
def transfer_file(filename, id='', dest_path="/home/#{user}/")
|
@@ -168,14 +223,16 @@ module SSH
|
|
168
223
|
end
|
169
224
|
|
170
225
|
def update(id)
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
226
|
+
id.each do |con|
|
227
|
+
connection = DATABASE.get_connection_by_id(id)
|
228
|
+
@input_fields.each do |key|
|
229
|
+
#TODO make this a method
|
230
|
+
connection[key] = %x{source #{File.dirname(__FILE__)}/ask.sh; ask '#{@pretty_names[key]}' '#{connection[key]}'}.chomp
|
231
|
+
end
|
232
|
+
connection[:connect_via] = nil if connection[:connect_via] == ""
|
233
|
+
DATABASE.update_connection(connection)
|
234
|
+
#TODO catch SQLite3::ConstraintException
|
175
235
|
end
|
176
|
-
connection[:connect_via] = nil if connection[:connect_via] == ""
|
177
|
-
DATABASE.update_connection(connection)
|
178
|
-
#TODO catch SQLite3::ConstraintException
|
179
236
|
end
|
180
237
|
|
181
238
|
def search_for(term)
|
@@ -191,10 +248,42 @@ module SSH
|
|
191
248
|
end
|
192
249
|
|
193
250
|
def multiple_connection(term)
|
251
|
+
@cons = []
|
194
252
|
DATABASE.search_for(term).each do |x|
|
195
253
|
x.all.each do |dataset|
|
196
|
-
|
254
|
+
@cons.push(dataset)
|
197
255
|
end
|
256
|
+
end
|
257
|
+
# FAIL, first push everything in cons, then do the rest !
|
258
|
+
puts "what yer gonna do?"
|
259
|
+
options = {execute_command: 'execute_command', connect_to: 'connect', ping: 'ping', info: 'info', delete: 'delete'}
|
260
|
+
comp = proc { |s| options.values.grep(/^#{Regexp.escape(s)}/) }
|
261
|
+
#Readline.completion_append_character = " "
|
262
|
+
Readline.completion_proc = comp
|
263
|
+
puts options.values.to_s
|
264
|
+
input= Readline.readline('> ', true)
|
265
|
+
ids = @cons.map {|x| x[:id].to_s}
|
266
|
+
input = input.chomp.gsub(/\s+\Z/, "")
|
267
|
+
case input
|
268
|
+
when 'execute_command'
|
269
|
+
# which commands
|
270
|
+
self.execute_command(ids)
|
271
|
+
exit
|
272
|
+
when 'connect'
|
273
|
+
self.connect_to(ids)
|
274
|
+
exit
|
275
|
+
when 'ping'
|
276
|
+
# exits after first ping
|
277
|
+
self.ping(ids)
|
278
|
+
exit
|
279
|
+
when 'info'
|
280
|
+
self.show_info(ids)
|
281
|
+
exit
|
282
|
+
when 'delete'
|
283
|
+
self.delete(ids)
|
284
|
+
exit
|
285
|
+
else
|
286
|
+
puts "That i dont know :/"
|
198
287
|
end
|
199
288
|
end
|
200
289
|
end
|
data/lib/ssh/manager/client.rb
CHANGED
@@ -33,6 +33,9 @@ module SSH
|
|
33
33
|
elsif @options[:info]
|
34
34
|
puts 'Printing info ..'
|
35
35
|
cli.new(@options).show_info(@options[:info])
|
36
|
+
elsif @options[:execute]
|
37
|
+
puts 'Executing command..'
|
38
|
+
cli.new(@options).execute_command(@options[:execute])
|
36
39
|
elsif @options[:transfer_file]
|
37
40
|
puts 'Transfering file..'
|
38
41
|
cli.new(@options).transfer_file(@options[:transfer_file].to_i, @argv[2], @argv[3])
|
@@ -50,22 +53,22 @@ module SSH
|
|
50
53
|
cli.new(@options).update_available
|
51
54
|
elsif @options[:update]
|
52
55
|
puts 'Updating ..'
|
53
|
-
cli.new(@options).update(@options[:update]
|
56
|
+
cli.new(@options).update(@options[:update])
|
54
57
|
elsif @options[:multi]
|
55
58
|
puts 'Connecting to multiple ips..'
|
56
59
|
cli.new(@options).multiple_connection(@options[:multi])
|
57
60
|
elsif @options[:transfer_key]
|
58
61
|
puts 'Transfering key..'
|
59
|
-
cli.new(@options).transfer_key(@options[:transfer_key]
|
60
|
-
elsif @options[:
|
62
|
+
cli.new(@options).transfer_key(@options[:transfer_key])
|
63
|
+
elsif @options[:encoding]
|
61
64
|
puts 'coding key..'
|
62
|
-
cli.new(@options).test(@options[:
|
65
|
+
cli.new(@options).test(@options[:encoding].to_i)
|
66
|
+
elsif @options[:settings]
|
67
|
+
puts 'Settings'
|
68
|
+
cli.new(@options).settings
|
63
69
|
elsif @options[:search]
|
64
70
|
puts 'Searching ..'
|
65
71
|
cli.new(@options).search_for(@options[:search])
|
66
|
-
# elsif @options[:settings]
|
67
|
-
# puts 'Settings'
|
68
|
-
# cli.new(@options).settings(@options[:settings])
|
69
72
|
else
|
70
73
|
if @argv.count == 1
|
71
74
|
cli.new(@options).connect_to(@argv.first.split(',')) if @argv != []
|
@@ -78,6 +81,7 @@ module SSH
|
|
78
81
|
end
|
79
82
|
|
80
83
|
def extract_options
|
84
|
+
begin
|
81
85
|
@optparse = OptionParser.new do |opts|
|
82
86
|
opts.banner = "Usage: sshm [options] ..."
|
83
87
|
@options[:add] = false
|
@@ -85,25 +89,30 @@ module SSH
|
|
85
89
|
@options[:add] = true
|
86
90
|
end
|
87
91
|
@options[:transfer_key] = false
|
88
|
-
opts.on( '-t', '--transferkey id', 'transfer key to <id>' ) do |opt|
|
92
|
+
opts.on( '-t', '--transferkey id,id,id', Array, 'transfer key to <id>' ) do |opt|
|
89
93
|
@options[:transfer_key] = opt
|
90
94
|
end
|
91
95
|
@options[:transfer_file] = false
|
92
96
|
opts.on( '-r', '--transferfile filename', 'file or dir / connection_ID / dest_path(default is /home/user/)' ) do |opt|
|
93
97
|
@options[:transfer_file] = opt
|
94
98
|
end
|
99
|
+
@options[:encoding] = false
|
95
100
|
code_list = (CODE_ALIASES.keys + CODES).join(',')
|
96
101
|
opts.on("--code CODE", CODES, CODE_ALIASES, "Select encoding"," (#{code_list})") do |encoding|
|
97
|
-
|
102
|
+
@options[:encoding] = encoding
|
98
103
|
end
|
99
104
|
@options[:connect] = false
|
100
|
-
opts.on( '-c', '--connect
|
105
|
+
opts.on( '-c', '--connect id1, id2, id3', Array, 'connect to <ids>' ) do |opt|
|
101
106
|
@options[:connect] = opt
|
102
107
|
end
|
103
108
|
@options[:info] = false
|
104
109
|
opts.on( '-i', '--info id1 id2 id3',Array, 'info about to <id>' ) do |opt|
|
105
110
|
@options[:info] = opt
|
106
111
|
end
|
112
|
+
@options[:execute] = false
|
113
|
+
opts.on( '-x', '--exec id1 id2 id3',Array, 'exec command on <id>' ) do |opt|
|
114
|
+
@options[:execute] = opt
|
115
|
+
end
|
107
116
|
@options[:ping] = false
|
108
117
|
opts.on( '-p', '--ping id', 'test connection of <id>' ) do |opt|
|
109
118
|
@options[:ping] = opt
|
@@ -113,7 +122,7 @@ module SSH
|
|
113
122
|
@options[:delete] = opt
|
114
123
|
end
|
115
124
|
@options[:update] = false
|
116
|
-
opts.on( '-u', '--update id', 'update connection <id>' ) do |opt|
|
125
|
+
opts.on( '-u', '--update id,id,id',Array ,'update connection <id>' ) do |opt|
|
117
126
|
@options[:update] = opt
|
118
127
|
end
|
119
128
|
@options[:search] = false
|
@@ -121,7 +130,7 @@ module SSH
|
|
121
130
|
@options[:search] = opt
|
122
131
|
end
|
123
132
|
@options[:multi] = false
|
124
|
-
opts.on( '-m', '--multi
|
133
|
+
opts.on( '-m', '--multi searchterm', 'connect to multiple ips with given criteria' ) do |opt|
|
125
134
|
@options[:multi] = opt
|
126
135
|
end
|
127
136
|
@options[:list] = false
|
@@ -132,6 +141,10 @@ module SSH
|
|
132
141
|
opts.on( '-g', '--upgrade', 'checks for upgrade' ) do
|
133
142
|
@options[:upgrade] = true
|
134
143
|
end
|
144
|
+
@options[:settings] = false
|
145
|
+
opts.on( '--settings', 'update settings' ) do
|
146
|
+
@options[:settings] = true
|
147
|
+
end
|
135
148
|
opts.on( '-h', '--help', 'display this screen' ) do
|
136
149
|
puts opts
|
137
150
|
exit
|
@@ -142,6 +155,9 @@ module SSH
|
|
142
155
|
end
|
143
156
|
end
|
144
157
|
@optparse.parse(@argv)
|
158
|
+
rescue => e
|
159
|
+
catch "That didnt work: #{e.to_s}"
|
160
|
+
end
|
145
161
|
end
|
146
162
|
end
|
147
163
|
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.1.
|
4
|
+
version: 1.1.2
|
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-07-
|
11
|
+
date: 2015-07-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -75,12 +75,6 @@ extensions: []
|
|
75
75
|
extra_rdoc_files: []
|
76
76
|
files:
|
77
77
|
- ".gitignore"
|
78
|
-
- ".idea/encodings.xml"
|
79
|
-
- ".idea/misc.xml"
|
80
|
-
- ".idea/modules.xml"
|
81
|
-
- ".idea/scopes/scope_settings.xml"
|
82
|
-
- ".idea/ssh-manager.iml"
|
83
|
-
- ".idea/vcs.xml"
|
84
78
|
- ".rspec"
|
85
79
|
- Gemfile
|
86
80
|
- LICENSE
|