sshx 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +20 -2
- data/lib/sshx/cli.rb +67 -5
- data/lib/sshx/version.rb +1 -1
- metadata +1 -1
data/README.md
CHANGED
@@ -2,6 +2,14 @@
|
|
2
2
|
|
3
3
|
Extended ssh command to use multi ssh_config, namespace and command completion.
|
4
4
|
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
You can install sshx from RubyGems.
|
8
|
+
|
9
|
+
```bash
|
10
|
+
gem install sshx
|
11
|
+
```
|
12
|
+
|
5
13
|
## Usage
|
6
14
|
|
7
15
|
You can use the sshx in the same way as ssh command because sshx is just a wrapper of ssh.
|
@@ -16,10 +24,20 @@ While ssh has only one configuration file .ssh/config, sshx can have multi confi
|
|
16
24
|
|
17
25
|
```bash
|
18
26
|
$ ls ~/.sshx/
|
19
|
-
album
|
27
|
+
album blog config ssh_config
|
28
|
+
```
|
29
|
+
|
30
|
+
The config file is configuration files for sshx. The album, blog and ssh_config (It's imported from ~/.ssh/config) are configuration for ssh.
|
31
|
+
|
32
|
+
## Multi hosts connection with tmux
|
33
|
+
|
34
|
+
You can connect to some hosts with [tmux](http://tmux.sourceforge.net/).
|
35
|
+
|
36
|
+
```bash
|
37
|
+
sshx blog.prd.web1,blog.prd.web2,blog.prd.web3
|
20
38
|
```
|
21
39
|
|
22
|
-
|
40
|
+
tmux must be installed if you use multi hosts connection.
|
23
41
|
|
24
42
|
## Namespace
|
25
43
|
|
data/lib/sshx/cli.rb
CHANGED
@@ -31,18 +31,51 @@ module Sshx
|
|
31
31
|
return
|
32
32
|
end
|
33
33
|
|
34
|
-
|
35
|
-
args
|
36
|
-
|
34
|
+
commands = []
|
35
|
+
hostname_arg = get_hostname_in_args(args)
|
36
|
+
hostnames = hostname_arg.split(/\s*,\s*/)
|
37
|
+
ssh_command = hostnames.length >= 2 ? $0 : @@ssh_path
|
38
|
+
hostnames.each{|hostname|
|
39
|
+
shell_args = []
|
40
|
+
args.each{|arg|
|
41
|
+
if arg == hostname_arg
|
42
|
+
shell_args.push(hostname.shellescape)
|
43
|
+
next
|
44
|
+
end
|
45
|
+
shell_args.push(arg.shellescape)
|
46
|
+
}
|
47
|
+
commands.push(ssh_command + ' ' + shell_args.join(' '))
|
37
48
|
}
|
38
49
|
|
39
|
-
|
40
|
-
|
50
|
+
if commands.length == 1
|
51
|
+
system(commands[0])
|
52
|
+
else
|
53
|
+
run_tmux(commands)
|
54
|
+
end
|
41
55
|
|
56
|
+
status = $?.exitstatus
|
42
57
|
exit status
|
43
58
|
|
44
59
|
end
|
45
60
|
|
61
|
+
def get_hostname_in_args(args)
|
62
|
+
|
63
|
+
is_option_parameter = false
|
64
|
+
|
65
|
+
args.each{|arg|
|
66
|
+
if /^-/ =~ arg
|
67
|
+
is_option_parameter = true
|
68
|
+
next
|
69
|
+
elsif is_option_parameter
|
70
|
+
is_option_parameter = false
|
71
|
+
next
|
72
|
+
else
|
73
|
+
return arg
|
74
|
+
end
|
75
|
+
}
|
76
|
+
|
77
|
+
end
|
78
|
+
|
46
79
|
def init()
|
47
80
|
|
48
81
|
if File.exist?(@@home_directory + '/.sshx')
|
@@ -249,6 +282,35 @@ module Sshx
|
|
249
282
|
|
250
283
|
end
|
251
284
|
|
285
|
+
def run_tmux(commands)
|
286
|
+
|
287
|
+
tmux_path = `which tmux`
|
288
|
+
if $?.exitstatus > 0
|
289
|
+
puts '[ERROR] tmux must be installed to use multi host connection. Install tmux from the following url. http://tmux.sourceforge.net/'
|
290
|
+
exit 1
|
291
|
+
end
|
292
|
+
|
293
|
+
window_name = 'sshx-window'
|
294
|
+
session_name = 'sshx-session-' + Time.now.to_i.to_s + Time.now.usec.to_s
|
295
|
+
layout = 'tiled'
|
296
|
+
|
297
|
+
`tmux start-server`
|
298
|
+
`tmux new-session -d -n #{window_name} -s #{session_name}`
|
299
|
+
|
300
|
+
commands.each_with_index { |command, index|
|
301
|
+
if index > 0
|
302
|
+
`tmux split-window -v -t #{window_name}`
|
303
|
+
end
|
304
|
+
escaped_command = command.shellescape
|
305
|
+
`tmux send-keys #{escaped_command} C-m`
|
306
|
+
`tmux select-layout -t #{window_name} #{layout}`
|
307
|
+
}
|
308
|
+
|
309
|
+
`tmux set-window-option synchronize-panes on`
|
310
|
+
`tmux attach-session -t #{session_name}`
|
311
|
+
|
312
|
+
end
|
313
|
+
|
252
314
|
end
|
253
315
|
end
|
254
316
|
end
|
data/lib/sshx/version.rb
CHANGED