tinyssh 0.0.2 → 0.0.3
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.
- data/README.md +60 -0
- data/Rakefile +8 -0
- data/bin/tinyssh +14 -10
- data/lib/tinyssh.rb +2 -1
- data/lib/tinysshoptparse.rb +0 -1
- data/test/test_tinyssh.rb +25 -0
- metadata +6 -3
data/README.md
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
tinyssh is a little ruby script to batch execute command, upload/download file or directory with ssh
|
2
|
+
|
3
|
+
## Require
|
4
|
+
you should have ruby installed and some support packages for ssh
|
5
|
+
|
6
|
+
- ruby
|
7
|
+
- rubygems
|
8
|
+
- net-ssh
|
9
|
+
- net-scp
|
10
|
+
- highline
|
11
|
+
|
12
|
+
you can install them by follow command if you use RPM base Linux
|
13
|
+
|
14
|
+
```
|
15
|
+
yum -y install ruby rubygems
|
16
|
+
gem install net-ssh
|
17
|
+
gem install net-scp
|
18
|
+
gem install highline
|
19
|
+
gem install tinyssh
|
20
|
+
|
21
|
+
find / -name tinyssh # find where tinyssh installed
|
22
|
+
ln -sv location_of_tinyssh /usr/local/bin # if you use rvm to manage multi version ruby, you don't need do this
|
23
|
+
```
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
```
|
28
|
+
Usage: ruby tinyssh.rb run|upload|download <position parameters> [option]
|
29
|
+
|
30
|
+
Specific options:
|
31
|
+
-u, --user [user] Specify a user for accessing remote hosts.(default: root)
|
32
|
+
-p, --port [port] Port to connect to on the remote host(default: 22)
|
33
|
+
-t, --timeout [time] Set the command timeout to seconds(default: 0)
|
34
|
+
-l, --list-file [file] File containing a list of hosts' IP Address
|
35
|
+
-o, --output-file [file] Output result to log file
|
36
|
+
-i, --identity-key [key] identity (private) key for authentication(default: /root/.ssh/id_rsa)
|
37
|
+
-n, --number-of-thread [number] Specify the number of concurrent jobs for each execution
|
38
|
+
-h, --help Show this message
|
39
|
+
```
|
40
|
+
|
41
|
+
- Run command
|
42
|
+
|
43
|
+
```
|
44
|
+
ruby tinyssh.rb run "command" -l my_host.txt -u root -p 22 -t 10 -i my_keys -n 10
|
45
|
+
```
|
46
|
+
|
47
|
+
- Upload file or directory
|
48
|
+
|
49
|
+
```
|
50
|
+
ruby tinyssh.rb upload src_file_or_directory dst_directory -l my_host.txt -u root -p 22 -t 10 -i my_keys -n 10
|
51
|
+
```
|
52
|
+
|
53
|
+
- Download file or directory
|
54
|
+
|
55
|
+
```
|
56
|
+
ruby tinyssh.rb download src_file_or_directory dst_directory -l my_host.txt -u root -p 22 -t 10 -i my_keys -n 10
|
57
|
+
```
|
58
|
+
|
59
|
+
Note: `run`, `upload`, `download`, can be `r`, `u`, `d`
|
60
|
+
Note: if you use key to authorize and your key is `/root/.ssh/id_rsa`, you don't need to specify `-i /root/.ssh/id_rsa`, but it will ask for password, just press enter
|
data/Rakefile
ADDED
data/bin/tinyssh
CHANGED
@@ -14,24 +14,28 @@ require 'tinyssh'
|
|
14
14
|
T = []
|
15
15
|
HOST = []
|
16
16
|
OUTPUT = {}
|
17
|
-
OUTPUT_TITLE = "-------------------------- EXECUTE STATUS --------------------------"
|
18
17
|
|
19
18
|
def main(options)
|
20
|
-
if ['run', 'r', 'u', 'up', 'upload', 'd', 'dl', 'download'].include?(ARGV[0])
|
21
|
-
|
19
|
+
if ['run', 'r', 'u', 'up', 'upload', 'd', 'dl', 'download'].include?(ARGV[0]) and options.host_file != nil
|
20
|
+
File.open(options.host_file).each_line do |line|
|
21
|
+
HOST << line.gsub("\n", '')
|
22
|
+
end
|
22
23
|
|
23
|
-
if options.
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
if options.keys.length == 1
|
25
|
+
password = ask("Enter password: ") { |q| q.echo = false }
|
26
|
+
else
|
27
|
+
password = ''
|
28
|
+
end
|
29
|
+
|
30
|
+
if password == ''
|
31
|
+
passphrase = ask("Enter passphrash: ") { |q| q.echo = false }
|
27
32
|
else
|
28
|
-
|
29
|
-
exit
|
33
|
+
passphrase = ''
|
30
34
|
end
|
31
35
|
|
32
36
|
HOST.each_with_index do |host, index|
|
33
37
|
T << Thread.new {
|
34
|
-
session = Net::SSH.conn(host, options.user, :port => options.port, :keys => options.keys, :timeout => options.timeout, :passphrase => passphrase.chomp)
|
38
|
+
session = Net::SSH.conn(host, options.user, :port => options.port, :password => password, :keys => options.keys, :timeout => options.timeout, :passphrase => passphrase.chomp)
|
35
39
|
|
36
40
|
if session.class == String
|
37
41
|
OUTPUT[index] = session % host
|
data/lib/tinyssh.rb
CHANGED
@@ -8,6 +8,7 @@ include Net::SSH
|
|
8
8
|
module Net::SSH
|
9
9
|
def conn(*options)
|
10
10
|
begin
|
11
|
+
puts 'try to connction'
|
11
12
|
return Net::SSH.start(*options)
|
12
13
|
rescue Timeout::Error
|
13
14
|
return "\n#{OUTPUT_TITLE}\nHost : %s [ " + "Connecting Timeout".red + " ] !\n"
|
@@ -17,7 +18,7 @@ module Net::SSH
|
|
17
18
|
return "\n#{OUTPUT_TITLE}\nHost : %s [ " + "Connection Refused".red + " ] !\n"
|
18
19
|
rescue Net::SSH::AuthenticationFailed
|
19
20
|
return "\n#{OUTPUT_TITLE}\nHost : %s [ " + "Authentication Failure".red + " ] !\n"
|
20
|
-
|
21
|
+
rescue
|
21
22
|
return "\n#{OUTPUT_TITLE}\nHost : %s [ " + "Name or Server not know".red + " ] !\n"
|
22
23
|
end
|
23
24
|
end
|
data/lib/tinysshoptparse.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
require 'colorize'
|
4
|
+
require 'tinysshoptparse'
|
5
|
+
require 'tinyssh'
|
6
|
+
|
7
|
+
OUTPUT_TITLE = "-------------------------- EXECUTE STATUS --------------------------"
|
8
|
+
|
9
|
+
class TinysshTest < Test::Unit::TestCase
|
10
|
+
def test_colorize
|
11
|
+
assert_equal "\e[31mred\e[0m", "red".red
|
12
|
+
assert_equal "\e[32mgreen\e[0m", "green".green
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_tinysshoptparse
|
16
|
+
assert_equal 'test.txt', TinysshOptparse.parse(['-l', 'test.txt']).host_file
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_tinyssh
|
20
|
+
assert_equal "\n#{OUTPUT_TITLE}\nHost : %s [ " + "Connection Refused".red + " ] !\n",
|
21
|
+
Net::SSH.conn('127.0.0.1', 'root', :port => '222', :timeout => 2)
|
22
|
+
assert_equal "\n#{OUTPUT_TITLE}\nHost : %s [ " + "Connecting Timeout".red + " ] !\n",
|
23
|
+
Net::SSH.conn('192.168.8.9', 'root', :port => '22', :timeout => 2)
|
24
|
+
end
|
25
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tinyssh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- William Herry
|
@@ -30,6 +30,9 @@ files:
|
|
30
30
|
- lib/colorize.rb
|
31
31
|
- lib/tinysshoptparse.rb
|
32
32
|
- lib/tinyssh.rb
|
33
|
+
- README.md
|
34
|
+
- Rakefile
|
35
|
+
- test/test_tinyssh.rb
|
33
36
|
- bin/tinyssh
|
34
37
|
homepage: https://rubygems.org/gems/tinyssh
|
35
38
|
licenses: []
|