sshelper 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,24 +1,79 @@
1
1
  # Sshelper
2
2
 
3
- TODO: Write a gem description
3
+ This gem is supposed to make your life easier if you have to do a lot of repetitive tasks over SSH. If you are sick
4
+ of doing the constant ```ssh user@example.org```, ```cd /opt/path/to/something```, ```./start.sh```
5
+ etc, then this tool is for you!
6
+
4
7
 
5
8
  ## Installation
6
9
 
7
- Add this line to your application's Gemfile:
10
+ Install it as follows:
8
11
 
9
- gem 'sshelper'
12
+ $ gem install sshelper
10
13
 
11
- And then execute:
14
+ ## Usage
12
15
 
13
- $ bundle
16
+ After installation, you will have to create a '.sshelper.json' file in your home directory:
14
17
 
15
- Or install it yourself as:
18
+ $ touch ~/.sshelper.json
16
19
 
17
- $ gem install sshelper
20
+ Or, you can use the built in functionality to generate a template:
18
21
 
19
- ## Usage
22
+ $ sshelper -t
23
+
24
+ Open it in your favorite editor:
25
+
26
+ $ nano ~/.sshelper.json
27
+
28
+ And use the following structure to add labels:
29
+ ```
30
+ {
31
+ "my_label1": {
32
+ "description": "View the content of the newest file on example.org and test.com",
33
+ "servers": [
34
+ {
35
+ "host": "example.org",
36
+ "port": 22,
37
+ "user": "root"
38
+ },
39
+ {
40
+ "host": "test.com",
41
+ "port": 1234,
42
+ "user": "eddy"
43
+ }
44
+ ],
45
+ "commands": [
46
+ "ls -l",
47
+ "cat `ls -1rt | tail -1`"
48
+ ]
49
+ },
50
+ "my_label2": {
51
+ "description": "List 1 file on example.org"
52
+ "servers": [
53
+ {
54
+ "host": "example.org",
55
+ "port": 22,
56
+ "user": "root"
57
+ }
58
+ ],
59
+ "commands": [
60
+ "ls -1"
61
+ ]
62
+ }
63
+ }
64
+
65
+ ```
66
+
67
+ After you have added a configuration file with labels, servers and commands, you can do stuff like this:
68
+
69
+ $ sshelper my_label1
70
+
71
+ This will execute all commands defined under "my_label1" on all servers defined under that same block! Talking about
72
+ enhancing your workflow...
73
+
74
+ To list all the labels you have defined, you can do:
20
75
 
21
- TODO: Write usage instructions here
76
+ $ sshelper -l
22
77
 
23
78
  ## Contributing
24
79
 
@@ -2,15 +2,38 @@
2
2
 
3
3
  require 'sshelper'
4
4
  require 'optparse'
5
+ require 'fileutils'
5
6
 
6
- Sshelper.prepare!
7
+ trap("SIGINT") { puts "\nExiting...\n"; exit! }
7
8
 
8
9
  options = {}
9
10
 
10
11
  global = OptionParser.new do |opts|
11
12
  opts.banner = "Usage: sshelper [your_label]\n\n"
13
+ opts.on("-l", "--labels", "Show all labels") do
14
+ puts "Usage: sshelper [your_label]\n\n"
15
+ puts "Labels:"
16
+ Sshelper.prepare!
17
+ Sshelper.configuration.each do |key, value|
18
+ puts "\t#{key.to_s}: #{value.description}"
19
+ end
20
+ puts "\n\n"
21
+ exit!
22
+ end
23
+
24
+ opts.on("-t", "--template", "Place a template configuration at ~/.sshelper.json") do
25
+ template = IO.read(File.expand_path('../../resources/template.json', __FILE__))
26
+ File.open(File.expand_path("~/.sshelper.json"), "w") { |f| f.write template }
27
+ exit!
28
+ end
12
29
  end
13
30
 
31
+ global.order!
32
+ command = ARGV.shift
33
+ puts global if command.nil?
34
+
35
+ Sshelper.prepare!
36
+
14
37
  subcommands = {}
15
38
 
16
39
  Sshelper.configuration.each do |key, value|
@@ -19,9 +42,6 @@ Sshelper.configuration.each do |key, value|
19
42
  end
20
43
  end
21
44
 
22
- global.order!
23
- command = ARGV.shift
24
- puts global if command.nil?
25
45
  subcommands[command].order! if subcommands.member? command
26
46
 
27
47
  Sshelper.execute_label command
@@ -1,8 +1,11 @@
1
1
  require "sshelper/version"
2
2
  require "sshelper/hash"
3
+ require "sshelper/string"
3
4
  require "net/ssh"
5
+ require "net/ssh/telnet"
4
6
  require "json"
5
7
  require "fileutils"
8
+ require "socket"
6
9
 
7
10
  module Sshelper
8
11
  @config
@@ -37,13 +40,18 @@ module Sshelper
37
40
 
38
41
  @config[label].servers.each do |server|
39
42
  port = (server.include?("port") ? server.port : 22)
40
- Net::SSH.start(server.host, server.user, :port => port) do |ssh|
41
- @config[label].commands.each do |command|
42
- puts ssh.exec!(command)
43
- end
43
+ ssh = Net::SSH.start(server.host, server.user, :port => port)
44
+ s = Net::SSH::Telnet.new("Session" => ssh)
45
+ puts "Logged in".pink
46
+ @config[label].commands.each do |command|
47
+ puts "\nExecuting: #{command}".red
48
+ puts '#### OUTPUT ####'.blue
49
+ puts "#{s.cmd(command).split("\n").join("\n ~> ")}"
50
+ puts '#### END ####'.blue
44
51
  end
45
- end
46
-
52
+ s.close
53
+ ssh.close
54
+ end
47
55
  end
48
56
 
49
57
  def self.configuration
@@ -0,0 +1,25 @@
1
+ class String
2
+ def colorize(color_code)
3
+ "\e[#{color_code}m#{self}\e[0m"
4
+ end
5
+
6
+ def red
7
+ colorize(31)
8
+ end
9
+
10
+ def green
11
+ colorize(32)
12
+ end
13
+
14
+ def yellow
15
+ colorize(33)
16
+ end
17
+
18
+ def blue
19
+ colorize(34)
20
+ end
21
+
22
+ def pink
23
+ colorize(35)
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module Sshelper
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -0,0 +1,16 @@
1
+ {
2
+ "my_label1": {
3
+ "description": "some description",
4
+ "servers": [
5
+ {
6
+ "host": "my.host.com",
7
+ "port": 22,
8
+ "user": "my_user"
9
+ }
10
+ ],
11
+ "commands": [
12
+ "cd /opt",
13
+ "ls -l"
14
+ ]
15
+ }
16
+ }
@@ -22,5 +22,6 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "rspec"
24
24
 
25
- spec.add_dependency "net-ssh"
25
+ spec.add_dependency "net-ssh", "~> 2.1.0"
26
+ spec.add_dependency "net-ssh-telnet"
26
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sshelper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-30 00:00:00.000000000 Z
12
+ date: 2013-07-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -61,6 +61,22 @@ dependencies:
61
61
  version: '0'
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: net-ssh
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 2.1.0
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 2.1.0
78
+ - !ruby/object:Gem::Dependency
79
+ name: net-ssh-telnet
64
80
  requirement: !ruby/object:Gem::Requirement
65
81
  none: false
66
82
  requirements:
@@ -93,7 +109,9 @@ files:
93
109
  - bin/sshelper
94
110
  - lib/sshelper.rb
95
111
  - lib/sshelper/hash.rb
112
+ - lib/sshelper/string.rb
96
113
  - lib/sshelper/version.rb
114
+ - resources/template.json
97
115
  - spec/spec_helper.rb
98
116
  - spec/sshelper_spec.rb
99
117
  - sshelper.gemspec