pec2 0.5.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pec2/cli.rb +1 -9
- data/lib/pec2/pssh.rb +58 -28
- data/lib/pec2/version.rb +1 -1
- data/pec2.gemspec +4 -1
- data/spec/cli_spec.rb +0 -1
- data/spec/pssh_spec.rb +1 -54
- metadata +46 -24
- data/exe/bin/pnuke +0 -96
- data/exe/bin/prsync +0 -126
- data/exe/bin/pscp +0 -108
- data/exe/bin/pslurp +0 -129
- data/exe/bin/pssh +0 -118
- data/exe/bin/pssh-askpass +0 -11
- data/exe/man/man1/pnuke.1 +0 -268
- data/exe/man/man1/prsync.1 +0 -299
- data/exe/man/man1/pscp.1 +0 -271
- data/exe/man/man1/pslurp.1 +0 -280
- data/exe/man/man1/pssh.1 +0 -368
- data/exe/psshlib/__init__.py +0 -0
- data/exe/psshlib/askpass_client.py +0 -102
- data/exe/psshlib/askpass_server.py +0 -101
- data/exe/psshlib/cli.py +0 -110
- data/exe/psshlib/color.py +0 -39
- data/exe/psshlib/manager.py +0 -345
- data/exe/psshlib/psshutil.py +0 -108
- data/exe/psshlib/task.py +0 -288
- data/exe/psshlib/version.py +0 -1
data/exe/man/man1/pssh.1
DELETED
@@ -1,368 +0,0 @@
|
|
1
|
-
.\" Man page for pssh. See "man 7 man" and "man man-pages" for formatting info.
|
2
|
-
.TH pssh 1 "January 24, 2012"
|
3
|
-
|
4
|
-
.SH NAME
|
5
|
-
pssh \(em parallel ssh program
|
6
|
-
|
7
|
-
|
8
|
-
.SH SYNOPSIS
|
9
|
-
.B pssh
|
10
|
-
.RB [ \-vAiIP ]
|
11
|
-
.RB [ \-h
|
12
|
-
.IR hosts_file ]
|
13
|
-
.RB [ \-H
|
14
|
-
.RI [ user @] host [: port ]]
|
15
|
-
.RB [ \-l
|
16
|
-
.IR user ]
|
17
|
-
.RB [ \-p
|
18
|
-
.IR par ]
|
19
|
-
.RB [ \-o
|
20
|
-
.IR outdir ]
|
21
|
-
.RB [ \-e
|
22
|
-
.IR errdir ]
|
23
|
-
.RB [ \-t
|
24
|
-
.IR timeout ]
|
25
|
-
.RB [ \-O
|
26
|
-
.IR options ]
|
27
|
-
.RB [ \-x
|
28
|
-
.IR args ]
|
29
|
-
.RB [ \-X
|
30
|
-
.IR arg ]
|
31
|
-
.I command ...
|
32
|
-
|
33
|
-
.B pssh \-I
|
34
|
-
.RB [ \-vAiIP ]
|
35
|
-
.RB [ \-h
|
36
|
-
.IR hosts_file ]
|
37
|
-
.RB [ \-H
|
38
|
-
.RI [ user @] host [: port ]]
|
39
|
-
.RB [ \-l
|
40
|
-
.IR user ]
|
41
|
-
.RB [ \-p
|
42
|
-
.IR par ]
|
43
|
-
.RB [ \-o
|
44
|
-
.IR outdir ]
|
45
|
-
.RB [ \-e
|
46
|
-
.IR errdir ]
|
47
|
-
.RB [ \-t
|
48
|
-
.IR timeout ]
|
49
|
-
.RB [ \-O
|
50
|
-
.IR options ]
|
51
|
-
.RB [ \-x
|
52
|
-
.IR args ]
|
53
|
-
.RB [ \-X
|
54
|
-
.IR arg ]
|
55
|
-
.RI [ command
|
56
|
-
.IR ... ]
|
57
|
-
|
58
|
-
|
59
|
-
.SH DESCRIPTION
|
60
|
-
.PP
|
61
|
-
.B pssh
|
62
|
-
is a program for executing ssh in parallel on a number of hosts. It provides
|
63
|
-
features such as sending input to all of the processes, passing a password
|
64
|
-
to ssh, saving output to files, and timing out.
|
65
|
-
|
66
|
-
The PSSH_NODENUM and PSSH_HOST environment variables are sent to the remote
|
67
|
-
host. The PSSH_NODENUM variable is assigned a unique number for each ssh
|
68
|
-
connection, starting with 0 and counting up. The PSSH_HOST variable is
|
69
|
-
assigned the name of the host as specified in the hosts list. Note that sshd
|
70
|
-
drops environment variables by default, so sshd_config on the remote host must
|
71
|
-
include the line:
|
72
|
-
.RS
|
73
|
-
AcceptEnv PSSH_NODENUM PSSH_HOST
|
74
|
-
.RE
|
75
|
-
|
76
|
-
.SH OPTIONS
|
77
|
-
|
78
|
-
.TP
|
79
|
-
.BI \-h " host_file"
|
80
|
-
.PD 0
|
81
|
-
.TP
|
82
|
-
.BI \-\-hosts " host_file"
|
83
|
-
Read hosts from the given
|
84
|
-
.IR host_file .
|
85
|
-
Lines in the host file are of the form
|
86
|
-
.RI [ user @] host [: port ]
|
87
|
-
and can include blank lines and comments (lines beginning with "#").
|
88
|
-
If multiple host files are given (the
|
89
|
-
.B \-h
|
90
|
-
option is used more than once), then pssh behaves as though these files
|
91
|
-
were concatenated together.
|
92
|
-
If a host is specified multiple times, then pssh will connect the
|
93
|
-
given number of times.
|
94
|
-
|
95
|
-
.TP
|
96
|
-
.B \-H
|
97
|
-
.RI [ user @] host [: port ]
|
98
|
-
.PD 0
|
99
|
-
.TP
|
100
|
-
.B \-\-host
|
101
|
-
.RI [ user @] host [: port ]
|
102
|
-
.PD 0
|
103
|
-
.TP
|
104
|
-
.B \-H
|
105
|
-
.RI \(dq[ user @] host [: port ]
|
106
|
-
[
|
107
|
-
.RI [ user @] host [: port
|
108
|
-
] ... ]\(dq
|
109
|
-
.PD 0
|
110
|
-
.TP
|
111
|
-
.B \-\-host
|
112
|
-
.RI \(dq[ user @] host [: port ]
|
113
|
-
[
|
114
|
-
.RI [ user @] host [: port
|
115
|
-
] ... ]\(dq
|
116
|
-
.PD 0
|
117
|
-
.IP
|
118
|
-
Add the given host strings to the list of hosts. This option may be given
|
119
|
-
multiple times, and may be used in conjunction with the
|
120
|
-
.B \-h
|
121
|
-
option.
|
122
|
-
|
123
|
-
.TP
|
124
|
-
.BI \-l " user"
|
125
|
-
.PD 0
|
126
|
-
.TP
|
127
|
-
.BI \-\-user " user"
|
128
|
-
Use the given username as the default for any host entries that don't
|
129
|
-
specifically specify a user.
|
130
|
-
|
131
|
-
.TP
|
132
|
-
.BI \-p " parallelism"
|
133
|
-
.PD 0
|
134
|
-
.TP
|
135
|
-
.BI \-\-par " parallelism"
|
136
|
-
Use the given number as the maximum number of concurrent connections.
|
137
|
-
|
138
|
-
.TP
|
139
|
-
.BI \-t " timeout"
|
140
|
-
.PD 0
|
141
|
-
.TP
|
142
|
-
.BI \-\-timeout " timeout"
|
143
|
-
Make connections time out after the given number of seconds. With a value
|
144
|
-
of 0, pssh will not timeout any connections.
|
145
|
-
|
146
|
-
.TP
|
147
|
-
.BI \-o " outdir"
|
148
|
-
.PD 0
|
149
|
-
.TP
|
150
|
-
.BI \-\-outdir " outdir"
|
151
|
-
Save standard output to files in the given directory. Filenames are of the
|
152
|
-
form
|
153
|
-
.RI [ user @] host [: port ][. num ]
|
154
|
-
where the user and port are only included for hosts that explicitly
|
155
|
-
specify them. The number is a counter that is incremented each time for hosts
|
156
|
-
that are specified more than once.
|
157
|
-
|
158
|
-
.TP
|
159
|
-
.BI \-e " errdir"
|
160
|
-
.PD 0
|
161
|
-
.TP
|
162
|
-
.BI \-\-errdir " errdir"
|
163
|
-
Save standard error to files in the given directory. Filenames are of the
|
164
|
-
same form as with the
|
165
|
-
.B \-o
|
166
|
-
option.
|
167
|
-
|
168
|
-
.TP
|
169
|
-
.BI \-x " args"
|
170
|
-
.PD 0
|
171
|
-
.TP
|
172
|
-
.BI \-\-extra-args " args"
|
173
|
-
Passes extra SSH command-line arguments (see the
|
174
|
-
.BR ssh (1)
|
175
|
-
man page for more information about SSH arguments).
|
176
|
-
This option may be specified multiple times.
|
177
|
-
The arguments are processed to split on whitespace, protect text within
|
178
|
-
quotes, and escape with backslashes.
|
179
|
-
To pass arguments without such processing, use the
|
180
|
-
.B \-X
|
181
|
-
option instead.
|
182
|
-
|
183
|
-
.TP
|
184
|
-
.BI \-X " arg"
|
185
|
-
.PD 0
|
186
|
-
.TP
|
187
|
-
.BI \-\-extra-arg " arg"
|
188
|
-
Passes a single SSH command-line argument (see the
|
189
|
-
.BR ssh (1)
|
190
|
-
man page for more information about SSH arguments). Unlike the
|
191
|
-
.B \-x
|
192
|
-
option, no processing is performed on the argument, including word splitting.
|
193
|
-
To pass multiple command-line arguments, use the option once for each
|
194
|
-
argument.
|
195
|
-
|
196
|
-
.TP
|
197
|
-
.BI \-O " options"
|
198
|
-
.PD 0
|
199
|
-
.TP
|
200
|
-
.BI \-\-options " options"
|
201
|
-
SSH options in the format used in the SSH configuration file (see the
|
202
|
-
.BR ssh_config (5)
|
203
|
-
man page for more information). This option may be specified multiple
|
204
|
-
times.
|
205
|
-
|
206
|
-
.TP
|
207
|
-
.B \-A
|
208
|
-
.PD 0
|
209
|
-
.TP
|
210
|
-
.B \-\-askpass
|
211
|
-
Prompt for a password and pass it to ssh. The password may be used for
|
212
|
-
either to unlock a key or for password authentication.
|
213
|
-
The password is transferred in a fairly secure manner (e.g., it will not show
|
214
|
-
up in argument lists). However, be aware that a root user on your system
|
215
|
-
could potentially intercept the password.
|
216
|
-
|
217
|
-
.TP
|
218
|
-
.B \-i
|
219
|
-
.PD 0
|
220
|
-
.TP
|
221
|
-
.B \-\-inline
|
222
|
-
Display standard output and standard error as each host completes.
|
223
|
-
|
224
|
-
.TP
|
225
|
-
.B \-\-inline\-stdout
|
226
|
-
Display standard output (but not standard error) as each host completes.
|
227
|
-
|
228
|
-
.TP
|
229
|
-
.B \-v
|
230
|
-
.PD 0
|
231
|
-
.TP
|
232
|
-
.B \-\-verbose
|
233
|
-
Include error messages from ssh with the
|
234
|
-
.B \-i
|
235
|
-
and
|
236
|
-
.B \e
|
237
|
-
options.
|
238
|
-
|
239
|
-
.TP
|
240
|
-
.B \-I
|
241
|
-
.PD 0
|
242
|
-
.TP
|
243
|
-
.B \-\-send-input
|
244
|
-
Read input and send to each ssh process. Since ssh allows a command script to
|
245
|
-
be sent on standard input, the
|
246
|
-
.B \-I
|
247
|
-
option may be used in lieu of the command argument.
|
248
|
-
|
249
|
-
.TP
|
250
|
-
.B \-P
|
251
|
-
.PD 0
|
252
|
-
.TP
|
253
|
-
.B \-\-print
|
254
|
-
Display output as it arrives. This option is of limited usefulness because
|
255
|
-
output from different hosts are interleaved.
|
256
|
-
|
257
|
-
|
258
|
-
.SH EXAMPLES
|
259
|
-
|
260
|
-
.PP
|
261
|
-
Connect to host1 and host2, and print "hello, world" from each:
|
262
|
-
.RS
|
263
|
-
pssh -i -H "host1 host2" echo "hello, world"
|
264
|
-
.RE
|
265
|
-
|
266
|
-
.PP
|
267
|
-
Print "hello, world" from each host specified in the file hosts.txt:
|
268
|
-
.RS
|
269
|
-
pssh -i -h hosts.txt echo "hello, world"
|
270
|
-
.RE
|
271
|
-
|
272
|
-
.PP
|
273
|
-
Run a command as root with a prompt for the root password:
|
274
|
-
.RS
|
275
|
-
pssh -i -h hosts.txt -A -l root echo hi
|
276
|
-
.RE
|
277
|
-
|
278
|
-
.PP
|
279
|
-
Run a long command without timing out:
|
280
|
-
.RS
|
281
|
-
pssh -i -h hosts.txt -t 0 sleep 10000
|
282
|
-
.RE
|
283
|
-
|
284
|
-
.PP
|
285
|
-
If the file hosts.txt has a large number of entries, say 100, then the
|
286
|
-
parallelism option may also be set to 100 to ensure that the commands are run
|
287
|
-
concurrently:
|
288
|
-
.RS
|
289
|
-
pssh -i -h hosts.txt -p 100 -t 0 sleep 10000
|
290
|
-
.RE
|
291
|
-
|
292
|
-
.PP
|
293
|
-
Run a command without checking or saving host keys:
|
294
|
-
.RS
|
295
|
-
pssh -i -H host1 -H host2 -x "-O StrictHostKeyChecking=no -O UserKnownHostsFile=/dev/null -O GlobalKnownHostsFile=/dev/null" echo hi
|
296
|
-
.RE
|
297
|
-
|
298
|
-
.PP
|
299
|
-
Print the node number for each connection (this will print 0, 1, and 2):
|
300
|
-
.RS
|
301
|
-
pssh -i -H host1 -H host1 -H host2 'echo $PSSH_NODENUM'
|
302
|
-
.RE
|
303
|
-
|
304
|
-
.SH TIPS
|
305
|
-
|
306
|
-
.PP
|
307
|
-
If you have a set of hosts that you connect to frequently with specific
|
308
|
-
options, it may be helpful to create an alias such as:
|
309
|
-
.RS
|
310
|
-
alias pssh_servers="pssh -h /path/to/server_list.txt -l root -A"
|
311
|
-
.RE
|
312
|
-
|
313
|
-
.PP
|
314
|
-
The ssh_config file can include an arbitrary number of Host sections. Each
|
315
|
-
host entry specifies ssh options which apply only to the given host. Host
|
316
|
-
definitions can even behave like aliases if the HostName option is included.
|
317
|
-
This ssh feature, in combination with pssh host files, provides a tremendous
|
318
|
-
amount of flexibility.
|
319
|
-
|
320
|
-
|
321
|
-
.SH EXIT STATUS
|
322
|
-
|
323
|
-
.PP
|
324
|
-
The exit status codes from pssh are as follows:
|
325
|
-
|
326
|
-
.TP
|
327
|
-
.B 0
|
328
|
-
Success
|
329
|
-
|
330
|
-
.TP
|
331
|
-
.B 1
|
332
|
-
Miscellaneous error
|
333
|
-
|
334
|
-
.TP
|
335
|
-
.B 2
|
336
|
-
Syntax or usage error
|
337
|
-
|
338
|
-
.TP
|
339
|
-
.B 3
|
340
|
-
At least one process was killed by a signal or timed out.
|
341
|
-
|
342
|
-
.TP
|
343
|
-
.B 4
|
344
|
-
All processes completed, but at least one ssh process reported an error
|
345
|
-
(exit status 255).
|
346
|
-
|
347
|
-
.TP
|
348
|
-
.B 5
|
349
|
-
There were no ssh errors, but at least one remote command had a non-zero exit
|
350
|
-
status.
|
351
|
-
|
352
|
-
|
353
|
-
.SH AUTHORS
|
354
|
-
.PP
|
355
|
-
Written by
|
356
|
-
Brent N. Chun <bnc@theether.org> and
|
357
|
-
Andrew McNabb <amcnabb@mcnabbs.org>.
|
358
|
-
|
359
|
-
http://code.google.com/p/parallel-ssh/
|
360
|
-
|
361
|
-
|
362
|
-
.SH SEE ALSO
|
363
|
-
.BR ssh (1),
|
364
|
-
.BR ssh_config(5),
|
365
|
-
.BR pscp (1),
|
366
|
-
.BR prsync (1),
|
367
|
-
.BR pslurp (1),
|
368
|
-
.BR pnuke (1),
|
data/exe/psshlib/__init__.py
DELETED
File without changes
|
@@ -1,102 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python
|
2
|
-
# -*- Mode: python -*-
|
3
|
-
|
4
|
-
# Copyright (c) 2009-2012, Andrew McNabb
|
5
|
-
|
6
|
-
"""Implementation of SSH_ASKPASS to get a password to ssh from pssh.
|
7
|
-
|
8
|
-
The password is read from the socket specified by the environment variable
|
9
|
-
PSSH_ASKPASS_SOCKET. The other end of this socket is pssh.
|
10
|
-
|
11
|
-
The ssh man page discusses SSH_ASKPASS as follows:
|
12
|
-
If ssh needs a passphrase, it will read the passphrase from the current
|
13
|
-
terminal if it was run from a terminal. If ssh does not have a terminal
|
14
|
-
associated with it but DISPLAY and SSH_ASKPASS are set, it will execute
|
15
|
-
the program specified by SSH_ASKPASS and open an X11 window to read the
|
16
|
-
passphrase. This is particularly useful when calling ssh from a .xsession
|
17
|
-
or related script. (Note that on some machines it may be necessary to
|
18
|
-
redirect the input from /dev/null to make this work.)
|
19
|
-
"""
|
20
|
-
|
21
|
-
import os
|
22
|
-
import socket
|
23
|
-
import sys
|
24
|
-
import textwrap
|
25
|
-
|
26
|
-
bin_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
|
27
|
-
askpass_bin_path = os.path.join(bin_dir, 'pssh-askpass')
|
28
|
-
ASKPASS_PATHS = (askpass_bin_path,
|
29
|
-
'/usr/libexec/pssh/pssh-askpass',
|
30
|
-
'/usr/local/libexec/pssh/pssh-askpass',
|
31
|
-
'/usr/lib/pssh/pssh-askpass',
|
32
|
-
'/usr/local/lib/pssh/pssh-askpass')
|
33
|
-
|
34
|
-
_executable_path = None
|
35
|
-
|
36
|
-
def executable_path():
|
37
|
-
"""Determines the value to use for SSH_ASKPASS.
|
38
|
-
|
39
|
-
The value is cached since this may be called many times.
|
40
|
-
"""
|
41
|
-
global _executable_path
|
42
|
-
if _executable_path is None:
|
43
|
-
for path in ASKPASS_PATHS:
|
44
|
-
if os.access(path, os.X_OK):
|
45
|
-
_executable_path = path
|
46
|
-
break
|
47
|
-
else:
|
48
|
-
_executable_path = ''
|
49
|
-
sys.stderr.write(textwrap.fill("Warning: could not find an"
|
50
|
-
" executable path for askpass because PSSH was not"
|
51
|
-
" installed correctly. Password prompts will not work."))
|
52
|
-
sys.stderr.write('\n')
|
53
|
-
return _executable_path
|
54
|
-
|
55
|
-
def askpass_main():
|
56
|
-
"""Connects to pssh over the socket specified at PSSH_ASKPASS_SOCKET."""
|
57
|
-
|
58
|
-
verbose = os.getenv('PSSH_ASKPASS_VERBOSE')
|
59
|
-
|
60
|
-
# It's not documented anywhere, as far as I can tell, but ssh may prompt
|
61
|
-
# for a password or ask a yes/no question. The command-line argument
|
62
|
-
# specifies what is needed.
|
63
|
-
if len(sys.argv) > 1:
|
64
|
-
prompt = sys.argv[1]
|
65
|
-
if verbose:
|
66
|
-
sys.stderr.write('pssh-askpass received prompt: "%s"\n' % prompt)
|
67
|
-
if not prompt.strip().lower().endswith('password:'):
|
68
|
-
sys.stderr.write(prompt)
|
69
|
-
sys.stderr.write('\n')
|
70
|
-
sys.exit(1)
|
71
|
-
else:
|
72
|
-
sys.stderr.write('Error: pssh-askpass called without a prompt.\n')
|
73
|
-
sys.exit(1)
|
74
|
-
|
75
|
-
address = os.getenv('PSSH_ASKPASS_SOCKET')
|
76
|
-
if not address:
|
77
|
-
sys.stderr.write(textwrap.fill("pssh error: SSH requested a password."
|
78
|
-
" Please create SSH keys or use the -A option to provide a"
|
79
|
-
" password."))
|
80
|
-
sys.stderr.write('\n')
|
81
|
-
sys.exit(1)
|
82
|
-
|
83
|
-
sock = socket.socket(socket.AF_UNIX)
|
84
|
-
try:
|
85
|
-
sock.connect(address)
|
86
|
-
except socket.error:
|
87
|
-
_, e, _ = sys.exc_info()
|
88
|
-
message = e.args[1]
|
89
|
-
sys.stderr.write("Couldn't bind to %s: %s.\n" % (address, message))
|
90
|
-
sys.exit(2)
|
91
|
-
|
92
|
-
try:
|
93
|
-
password = sock.makefile().read()
|
94
|
-
except socket.error:
|
95
|
-
sys.stderr.write("Socket error.\n")
|
96
|
-
sys.exit(3)
|
97
|
-
|
98
|
-
print(password)
|
99
|
-
|
100
|
-
|
101
|
-
if __name__ == '__main__':
|
102
|
-
askpass_main()
|