ronin-post_ex 0.1.0.beta1
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.
- checksums.yaml +7 -0
- data/.document +6 -0
- data/.github/workflows/ruby.yml +31 -0
- data/.gitignore +13 -0
- data/.rspec +1 -0
- data/.ruby-version +1 -0
- data/.yardopts +1 -0
- data/API_SPEC.md +235 -0
- data/COPYING.txt +165 -0
- data/ChangeLog.md +23 -0
- data/Gemfile +36 -0
- data/README.md +245 -0
- data/Rakefile +34 -0
- data/examples/bind_shell.rb +19 -0
- data/gemspec.yml +25 -0
- data/lib/ronin/post_ex/cli/shell_shell.rb +66 -0
- data/lib/ronin/post_ex/cli/system_shell.rb +811 -0
- data/lib/ronin/post_ex/remote_dir.rb +190 -0
- data/lib/ronin/post_ex/remote_file/stat.rb +174 -0
- data/lib/ronin/post_ex/remote_file.rb +417 -0
- data/lib/ronin/post_ex/remote_process.rb +170 -0
- data/lib/ronin/post_ex/resource.rb +144 -0
- data/lib/ronin/post_ex/sessions/bind_shell.rb +60 -0
- data/lib/ronin/post_ex/sessions/remote_shell_session.rb +48 -0
- data/lib/ronin/post_ex/sessions/reverse_shell.rb +67 -0
- data/lib/ronin/post_ex/sessions/rpc_session.rb +779 -0
- data/lib/ronin/post_ex/sessions/session.rb +73 -0
- data/lib/ronin/post_ex/sessions/shell_session.rb +618 -0
- data/lib/ronin/post_ex/system/fs.rb +650 -0
- data/lib/ronin/post_ex/system/process.rb +422 -0
- data/lib/ronin/post_ex/system/shell.rb +1037 -0
- data/lib/ronin/post_ex/system.rb +191 -0
- data/lib/ronin/post_ex/version.rb +26 -0
- data/lib/ronin/post_ex.rb +22 -0
- data/ronin-post_ex.gemspec +61 -0
- data/spec/sessions/bind_shell_spec.rb +31 -0
- data/spec/sessions/remote_shell_session_spec.rb +28 -0
- data/spec/sessions/reverse_shell_spec.rb +49 -0
- data/spec/sessions/rpc_session_spec.rb +500 -0
- data/spec/sessions/session_spec.rb +61 -0
- data/spec/sessions/shell_session_spec.rb +482 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/system_spec.rb +66 -0
- metadata +155 -0
@@ -0,0 +1,1037 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# ronin-post_ex - a Ruby API for Post-Exploitation.
|
4
|
+
#
|
5
|
+
# Copyright (c) 2007-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
6
|
+
#
|
7
|
+
# ronin-post_ex is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU Lesser General Public License as published
|
9
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# ronin-post_ex is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU Lesser General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU Lesser General Public License
|
18
|
+
# along with ronin-post_ex. If not, see <https://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
require 'ronin/post_ex/resource'
|
22
|
+
require 'ronin/post_ex/cli/shell_shell'
|
23
|
+
|
24
|
+
require 'date'
|
25
|
+
|
26
|
+
module Ronin
|
27
|
+
module PostEx
|
28
|
+
class System < Resource
|
29
|
+
#
|
30
|
+
# Provides access to a system's shell and executing shell commands.
|
31
|
+
#
|
32
|
+
# ## Supported API Methods
|
33
|
+
#
|
34
|
+
# * `shell_exec(command : String) -> String`
|
35
|
+
#
|
36
|
+
class Shell < Resource
|
37
|
+
|
38
|
+
# Persistent environment variables for the shell.
|
39
|
+
#
|
40
|
+
# @return {Hash{String => String}]
|
41
|
+
attr_reader :env
|
42
|
+
|
43
|
+
#
|
44
|
+
# Initializes the Shell resource.
|
45
|
+
#
|
46
|
+
# @param [#shell_exec] session
|
47
|
+
# The {#session} object that defines the `shell_exec` method.
|
48
|
+
#
|
49
|
+
def initialize(session)
|
50
|
+
super(session)
|
51
|
+
|
52
|
+
@cwd = nil
|
53
|
+
@env = {}
|
54
|
+
end
|
55
|
+
|
56
|
+
#
|
57
|
+
# Executes a shell command and returns it's output.
|
58
|
+
#
|
59
|
+
# @param [String] command
|
60
|
+
# The shell command to execute.
|
61
|
+
#
|
62
|
+
# @param [Array<String>] arguments
|
63
|
+
# Additional arguments for the shell command.
|
64
|
+
#
|
65
|
+
# @example
|
66
|
+
# system.shell.run 'ls'
|
67
|
+
#
|
68
|
+
# @example with additional arguments:
|
69
|
+
# system.shell.run 'ls', '-l'
|
70
|
+
#
|
71
|
+
# @return [String]
|
72
|
+
# The output of the shell command.
|
73
|
+
#
|
74
|
+
def run(command,*arguments)
|
75
|
+
unless arguments.empty?
|
76
|
+
command = "#{command} #{Shellwords.shelljoin(arguments)}"
|
77
|
+
end
|
78
|
+
|
79
|
+
unless @env.empty?
|
80
|
+
env_vars = @env.map { |key,value|
|
81
|
+
"#{key}=#{Shellwords.shellescape(value)}"
|
82
|
+
}.join(' ')
|
83
|
+
|
84
|
+
command = "env #{env_vars} #{command}"
|
85
|
+
end
|
86
|
+
|
87
|
+
if @cwd
|
88
|
+
command = "cd #{@cwd} && #{command}"
|
89
|
+
end
|
90
|
+
|
91
|
+
return @session.shell_exec(command)
|
92
|
+
end
|
93
|
+
resource_method :run, [:shell_exec]
|
94
|
+
|
95
|
+
#
|
96
|
+
# Executes a command and prints the resulting output.
|
97
|
+
#
|
98
|
+
# @param [String] command
|
99
|
+
# The program name or path to execute.
|
100
|
+
#
|
101
|
+
# @param [Array<String>] arguments
|
102
|
+
# Additional arguments for the shell command.
|
103
|
+
#
|
104
|
+
# @return [nil]
|
105
|
+
#
|
106
|
+
def system(command,*arguments)
|
107
|
+
puts(run(command,*arguments))
|
108
|
+
end
|
109
|
+
resource_method :system, [:shell_exec]
|
110
|
+
|
111
|
+
#
|
112
|
+
# Changes the current working directory in the shell.
|
113
|
+
#
|
114
|
+
# @param [String] path
|
115
|
+
# The path for the new current working directory.
|
116
|
+
#
|
117
|
+
# @return [String]
|
118
|
+
# Any error messages.
|
119
|
+
#
|
120
|
+
def cd(path)
|
121
|
+
@pwd = File.expand_path(path,pwd)
|
122
|
+
end
|
123
|
+
resource_method :cd, [:shell_exec]
|
124
|
+
|
125
|
+
#
|
126
|
+
# Gets the current working directory.
|
127
|
+
#
|
128
|
+
# @return [String]
|
129
|
+
# The path of the current working directory.
|
130
|
+
#
|
131
|
+
def pwd
|
132
|
+
@pwd ||= run('pwd').chomp
|
133
|
+
end
|
134
|
+
resource_method :pwd, [:shell_exec]
|
135
|
+
|
136
|
+
#
|
137
|
+
# Lists the files or directories.
|
138
|
+
#
|
139
|
+
# @param [Array<String>] arguments
|
140
|
+
# Arguments to pass to the `ls` command.
|
141
|
+
#
|
142
|
+
# @return [String]
|
143
|
+
# The full output of the command.
|
144
|
+
#
|
145
|
+
# @see #exec
|
146
|
+
#
|
147
|
+
def ls(*arguments)
|
148
|
+
run('ls',*arguments)
|
149
|
+
end
|
150
|
+
resource_method :ls, [:shell_exec]
|
151
|
+
|
152
|
+
#
|
153
|
+
# Lists all files or directories.
|
154
|
+
#
|
155
|
+
# @param [Array<String>] arguments
|
156
|
+
# Additional arguments to pass to the `ls -a` command.
|
157
|
+
#
|
158
|
+
# @return [String]
|
159
|
+
# The full output of the command.
|
160
|
+
#
|
161
|
+
# @see #exec
|
162
|
+
#
|
163
|
+
def ls_a(*arguments)
|
164
|
+
run('ls','-a',*arguments)
|
165
|
+
end
|
166
|
+
resource_method :ls_a, [:shell_exec]
|
167
|
+
|
168
|
+
#
|
169
|
+
# Lists information about files or directories.
|
170
|
+
#
|
171
|
+
# @param [Array<String>] arguments
|
172
|
+
# Additional arguments to pass to the `ls -l` command.
|
173
|
+
#
|
174
|
+
# @return [String]
|
175
|
+
# The full output of the command.
|
176
|
+
#
|
177
|
+
# @see #exec
|
178
|
+
#
|
179
|
+
def ls_l(*arguments)
|
180
|
+
run('ls','-l',*arguments)
|
181
|
+
end
|
182
|
+
resource_method :ls_l, [:shell_exec]
|
183
|
+
|
184
|
+
#
|
185
|
+
# Lists information about all files or directories.
|
186
|
+
#
|
187
|
+
# @param [Array<String>] arguments
|
188
|
+
# Additional arguments to pass to the `ls -la` command.
|
189
|
+
#
|
190
|
+
# @return [String]
|
191
|
+
# The full output of the command.
|
192
|
+
#
|
193
|
+
# @see #exec
|
194
|
+
#
|
195
|
+
def ls_la(*arguments)
|
196
|
+
run('ls','-la',*arguments)
|
197
|
+
end
|
198
|
+
resource_method :ls_la, [:shell_exec]
|
199
|
+
|
200
|
+
alias ls_al ls_la
|
201
|
+
|
202
|
+
#
|
203
|
+
# Searches for files or directories.
|
204
|
+
#
|
205
|
+
# @param [Array<String>] arguments
|
206
|
+
# Additional arguments to pass to the `find` command.
|
207
|
+
#
|
208
|
+
# @yield [path]
|
209
|
+
# If a block is given, it will be passed each path found.
|
210
|
+
#
|
211
|
+
# @yieldparam [String] path
|
212
|
+
# A path found by the `find` command.
|
213
|
+
#
|
214
|
+
# @return [Array<String>, nil]
|
215
|
+
# If no block is given, all found paths will be returned.
|
216
|
+
#
|
217
|
+
def find(*arguments,&block)
|
218
|
+
if block
|
219
|
+
run('find',*arguments).each_line(chomp: true,&block)
|
220
|
+
else
|
221
|
+
enum_for(__method__,*arguments).to_a
|
222
|
+
end
|
223
|
+
end
|
224
|
+
resource_method :find, [:shell_exec]
|
225
|
+
|
226
|
+
#
|
227
|
+
# Determines the format of a file.
|
228
|
+
#
|
229
|
+
# @param [Array<String>] arguments
|
230
|
+
# Additional arguments to pass to the `file` command.
|
231
|
+
#
|
232
|
+
# @return [String]
|
233
|
+
# The output of the `file` command.
|
234
|
+
#
|
235
|
+
# @example
|
236
|
+
# system.shell.file('data.db')
|
237
|
+
# # => "data.db: SQLite 3.x database"
|
238
|
+
#
|
239
|
+
def file(*arguments)
|
240
|
+
run('file',*arguments)
|
241
|
+
end
|
242
|
+
resource_method :file, [:shell_exec]
|
243
|
+
|
244
|
+
#
|
245
|
+
# Finds a program available to the shell.
|
246
|
+
#
|
247
|
+
# @param [Array<String>] arguments
|
248
|
+
# Additional arguments to pass to the `which` command.
|
249
|
+
#
|
250
|
+
# @return [String]
|
251
|
+
# The output from the `which` command.
|
252
|
+
#
|
253
|
+
def which(*arguments)
|
254
|
+
run('which',*arguments)
|
255
|
+
end
|
256
|
+
resource_method :which, [:shell_exec]
|
257
|
+
|
258
|
+
#
|
259
|
+
# Reads the contents of one or more files.
|
260
|
+
#
|
261
|
+
# @param [Array<String>] arguments
|
262
|
+
# Additional arguments to pass to the `cat` command.
|
263
|
+
#
|
264
|
+
# @return [String]
|
265
|
+
# The full output of the command.
|
266
|
+
#
|
267
|
+
# @see #exec
|
268
|
+
#
|
269
|
+
def cat(*arguments)
|
270
|
+
run('cat',*arguments)
|
271
|
+
end
|
272
|
+
resource_method :cat, [:shell_exec]
|
273
|
+
|
274
|
+
#
|
275
|
+
# Reads the first `n` lines of one or more files.
|
276
|
+
#
|
277
|
+
# @param [Array<String>] arguments
|
278
|
+
# Additional arguments to pass to the `head` command.
|
279
|
+
#
|
280
|
+
# @return [String]
|
281
|
+
# The full output of the command.
|
282
|
+
#
|
283
|
+
# @see #exec
|
284
|
+
#
|
285
|
+
def head(*arguments)
|
286
|
+
run('head',*arguments)
|
287
|
+
end
|
288
|
+
resource_method :head, [:shell_exec]
|
289
|
+
|
290
|
+
#
|
291
|
+
# Reads the first `n` lines of one or more files.
|
292
|
+
#
|
293
|
+
# @param [Integer] lines
|
294
|
+
# The number of lines to read from one or more files.
|
295
|
+
#
|
296
|
+
# @param [Array<String>] arguments
|
297
|
+
# Additional arguments to pass to the `head` command.
|
298
|
+
#
|
299
|
+
# @return [String]
|
300
|
+
# The full output of the command.
|
301
|
+
#
|
302
|
+
# @see #exec
|
303
|
+
#
|
304
|
+
def head_n(lines,*arguments)
|
305
|
+
head('-n',lines,*arguments)
|
306
|
+
end
|
307
|
+
resource_method :head_n, [:shell_exec]
|
308
|
+
|
309
|
+
#
|
310
|
+
# Reads the last `n` lines of one or more files.
|
311
|
+
#
|
312
|
+
# @param [Array<String>] arguments
|
313
|
+
# Additional arguments to pass to the `tail` command.
|
314
|
+
#
|
315
|
+
# @return [String]
|
316
|
+
# The full output of the command.
|
317
|
+
#
|
318
|
+
# @see #exec
|
319
|
+
#
|
320
|
+
def tail(*arguments)
|
321
|
+
run('tail',*arguments)
|
322
|
+
end
|
323
|
+
resource_method :tail, [:shell_exec]
|
324
|
+
|
325
|
+
#
|
326
|
+
# Reads the last `n` lines of one or more files.
|
327
|
+
#
|
328
|
+
# @param [Integer] lines
|
329
|
+
# The number of lines to read from one or more files.
|
330
|
+
#
|
331
|
+
# @param [Array<String>] arguments
|
332
|
+
# Additional arguments to pass to the `tail` command.
|
333
|
+
#
|
334
|
+
# @return [String]
|
335
|
+
# The full output of the command.
|
336
|
+
#
|
337
|
+
# @see #exec
|
338
|
+
#
|
339
|
+
def tail_n(lines,*arguments)
|
340
|
+
tail('-n',lines,*arguments)
|
341
|
+
end
|
342
|
+
resource_method :tail_n, [:shell_exec]
|
343
|
+
|
344
|
+
#
|
345
|
+
# Searches one or more files for a given pattern.
|
346
|
+
#
|
347
|
+
# @param [Array<String>] arguments
|
348
|
+
# Additional arguments to pass to the `grep` command.
|
349
|
+
#
|
350
|
+
# @yield [path, line]
|
351
|
+
# If a block is given, it will be passed the paths and lines
|
352
|
+
# within files that matched the given pattern.
|
353
|
+
#
|
354
|
+
# @yieldparam [String] path
|
355
|
+
# The path of a file that contains matching lines.
|
356
|
+
#
|
357
|
+
# @yieldparam [String] line
|
358
|
+
# A line that matches the given pattern.
|
359
|
+
#
|
360
|
+
# @return [Array<String>, nil]
|
361
|
+
# If no block is given, all matching paths and lines will be
|
362
|
+
# returned.
|
363
|
+
#
|
364
|
+
def grep(*arguments)
|
365
|
+
if block_given?
|
366
|
+
run('grep',*arguments).each_line(chomp: true) do |line|
|
367
|
+
yield(*line.split(':',2))
|
368
|
+
end
|
369
|
+
else
|
370
|
+
enum_for(__method__,*arguments).to_a
|
371
|
+
end
|
372
|
+
end
|
373
|
+
resource_method :grep, [:shell_exec]
|
374
|
+
|
375
|
+
#
|
376
|
+
# Runs `grep -E`.
|
377
|
+
#
|
378
|
+
# @param [Array<String>] arguments
|
379
|
+
# Additional arguments for the `grep` command.
|
380
|
+
#
|
381
|
+
# @return [Array<String>, nil]
|
382
|
+
# If no block is given, all matching paths and lines will be
|
383
|
+
# returned.
|
384
|
+
#
|
385
|
+
# @see #grep
|
386
|
+
#
|
387
|
+
def egrep(*arguments,&block)
|
388
|
+
grep('-E',*arguments,&block)
|
389
|
+
end
|
390
|
+
resource_method :egrep, [:shell_exec]
|
391
|
+
|
392
|
+
#
|
393
|
+
# Runs `grep -F`.
|
394
|
+
#
|
395
|
+
# @param [Array<String>] arguments
|
396
|
+
# Additional arguments for the `grep` command.
|
397
|
+
#
|
398
|
+
# @return [Array<String>, nil]
|
399
|
+
# If no block is given, all matching paths and lines will be
|
400
|
+
# returned.
|
401
|
+
#
|
402
|
+
# @see #grep
|
403
|
+
#
|
404
|
+
def fgrep(*arguments,&block)
|
405
|
+
grep('-F',*arguments,&block)
|
406
|
+
end
|
407
|
+
resource_method :fgrep, [:shell_exec]
|
408
|
+
|
409
|
+
#
|
410
|
+
# Touches a file.
|
411
|
+
#
|
412
|
+
# @param [Array<String>] arguments
|
413
|
+
# Additional arguments to pass to the `touch` command.
|
414
|
+
#
|
415
|
+
# @return [String]
|
416
|
+
# Any error messages returned by the `touch` command.
|
417
|
+
#
|
418
|
+
def touch(*arguments)
|
419
|
+
run('touch',*arguments)
|
420
|
+
end
|
421
|
+
resource_method :touch, [:shell_exec]
|
422
|
+
|
423
|
+
#
|
424
|
+
# Creates a tempfile.
|
425
|
+
#
|
426
|
+
# @param [Array<String>] arguments
|
427
|
+
# Additional arguments to pass to `mktemp`.
|
428
|
+
#
|
429
|
+
# @return [String]
|
430
|
+
# The path of the new tempfile.
|
431
|
+
#
|
432
|
+
def mktemp(*arguments)
|
433
|
+
run('mktemp',*arguments).chomp
|
434
|
+
end
|
435
|
+
resource_method :mktemp, [:shell_exec]
|
436
|
+
|
437
|
+
#
|
438
|
+
# Creates a tempdir.
|
439
|
+
#
|
440
|
+
# @param [Array<String>] arguments
|
441
|
+
# Additional arguments to pass to `mktemp`.
|
442
|
+
#
|
443
|
+
# @return [String]
|
444
|
+
# The path of the new tempdir.
|
445
|
+
#
|
446
|
+
def mktempdir(*arguments)
|
447
|
+
mktemp('-d',*arguments)
|
448
|
+
end
|
449
|
+
resource_method :mktempdir, [:shell_exec]
|
450
|
+
|
451
|
+
#
|
452
|
+
# Creates a new directory.
|
453
|
+
#
|
454
|
+
# @param [Array<String>] arguments
|
455
|
+
# Additional arguments to pass to the `mkdir` command.
|
456
|
+
#
|
457
|
+
# @return [String]
|
458
|
+
# Any error messages returned by the `mkdir` command.
|
459
|
+
#
|
460
|
+
def mkdir(*arguments)
|
461
|
+
run('mkdir',*arguments)
|
462
|
+
end
|
463
|
+
resource_method :mkdir, [:shell_exec]
|
464
|
+
|
465
|
+
#
|
466
|
+
# Copies one or more files or directories.
|
467
|
+
#
|
468
|
+
# @param [Array<String>] arguments
|
469
|
+
# Additional arguments to pass to the `cp` command.
|
470
|
+
#
|
471
|
+
# @return [String]
|
472
|
+
# Any error messages returned by the `cp` command.
|
473
|
+
#
|
474
|
+
def cp(*arguments)
|
475
|
+
run('cp',*arguments)
|
476
|
+
end
|
477
|
+
resource_method :cp, [:shell_exec]
|
478
|
+
|
479
|
+
#
|
480
|
+
# Runs `cp -r`.
|
481
|
+
#
|
482
|
+
# @param [Array<String>] arguments
|
483
|
+
# Additional arguments for the `cp` command.
|
484
|
+
#
|
485
|
+
# @return [String]
|
486
|
+
# Any error messages returned by the `cp` command.
|
487
|
+
#
|
488
|
+
# @see #cp
|
489
|
+
#
|
490
|
+
def cp_r(*arguments)
|
491
|
+
cp('-r',*arguments)
|
492
|
+
end
|
493
|
+
resource_method :cp_r, [:shell_exec]
|
494
|
+
|
495
|
+
#
|
496
|
+
# Runs `cp -a`.
|
497
|
+
#
|
498
|
+
# @param [Array<String>] arguments
|
499
|
+
# Additional arguments for the `cp` command.
|
500
|
+
#
|
501
|
+
# @return [String]
|
502
|
+
# Any error messages returned by the `cp` command.
|
503
|
+
#
|
504
|
+
# @see #cp
|
505
|
+
#
|
506
|
+
def cp_a(*arguments)
|
507
|
+
cp('-a',*arguments)
|
508
|
+
end
|
509
|
+
resource_method :cp_a, [:shell_exec]
|
510
|
+
|
511
|
+
#
|
512
|
+
# Runs `rsync`.
|
513
|
+
#
|
514
|
+
# @param [Array<String>] arguments
|
515
|
+
# Additional arguments to pass to the `rsync` command.
|
516
|
+
#
|
517
|
+
# @return [String]
|
518
|
+
# The full output of the command.
|
519
|
+
#
|
520
|
+
# @see #exec
|
521
|
+
#
|
522
|
+
def rsync(*arguments)
|
523
|
+
run('rsync',*arguments)
|
524
|
+
end
|
525
|
+
resource_method :rsync, [:shell_exec]
|
526
|
+
|
527
|
+
#
|
528
|
+
# Runs `rsync -a`.
|
529
|
+
#
|
530
|
+
# @param [Array<String>] arguments
|
531
|
+
# Additional arguments for the `rsync` command.
|
532
|
+
#
|
533
|
+
# @return [String]
|
534
|
+
# The full output of the command.
|
535
|
+
#
|
536
|
+
# @see #rsync
|
537
|
+
#
|
538
|
+
def rsync_a(*arguments)
|
539
|
+
rsync('-a',*arguments)
|
540
|
+
end
|
541
|
+
resource_method :rsync_a, [:shell_exec]
|
542
|
+
|
543
|
+
#
|
544
|
+
# Runs `wget`.
|
545
|
+
#
|
546
|
+
# @param [Array<String>] arguments
|
547
|
+
# Additional arguments to pass to the `rsync` command.
|
548
|
+
#
|
549
|
+
# @return [String]
|
550
|
+
# The full output of the command.
|
551
|
+
#
|
552
|
+
# @see #exec
|
553
|
+
#
|
554
|
+
def wget(*arguments)
|
555
|
+
run('wget','-q',*arguments)
|
556
|
+
end
|
557
|
+
resource_method :wget, [:shell_exec]
|
558
|
+
|
559
|
+
#
|
560
|
+
# Runs `wget -O`.
|
561
|
+
#
|
562
|
+
# @param [String] path
|
563
|
+
# The path that `wget` will write to.
|
564
|
+
#
|
565
|
+
# @param [Array<String>] arguments
|
566
|
+
# Additional arguments for the `wget` command.
|
567
|
+
#
|
568
|
+
# @return [String]
|
569
|
+
# The full output of the command.
|
570
|
+
#
|
571
|
+
# @see #wget
|
572
|
+
#
|
573
|
+
def wget_out(path,*arguments)
|
574
|
+
wget('-O',path,*arguments)
|
575
|
+
end
|
576
|
+
resource_method :wget_out, [:shell_exec]
|
577
|
+
|
578
|
+
#
|
579
|
+
# Runs the `curl`.
|
580
|
+
#
|
581
|
+
# @param [Array<String>] arguments
|
582
|
+
# Additional arguments to pass to the `curl` command.
|
583
|
+
#
|
584
|
+
# @return [String]
|
585
|
+
# The full output of the command.
|
586
|
+
#
|
587
|
+
# @see #exec
|
588
|
+
#
|
589
|
+
def curl(*arguments)
|
590
|
+
run('curl','-s',*arguments)
|
591
|
+
end
|
592
|
+
resource_method :curl, [:shell_exec]
|
593
|
+
|
594
|
+
#
|
595
|
+
# Runs `curl -O`.
|
596
|
+
#
|
597
|
+
# @param [String] path
|
598
|
+
# The path that `curl` will write to.
|
599
|
+
#
|
600
|
+
# @param [Array<String>] arguments
|
601
|
+
# Additional arguments for the `curl` command.
|
602
|
+
#
|
603
|
+
# @return [String]
|
604
|
+
# The full output of the command.
|
605
|
+
#
|
606
|
+
# @see #curl
|
607
|
+
#
|
608
|
+
def curl_out(path,*arguments)
|
609
|
+
curl('-O',path,*arguments)
|
610
|
+
end
|
611
|
+
resource_method :curl_out, [:shell_exec]
|
612
|
+
|
613
|
+
#
|
614
|
+
# Removes a directory.
|
615
|
+
#
|
616
|
+
# @param [Array<String>] arguments
|
617
|
+
# Additional arguments to pass to the `rmdir` command.
|
618
|
+
#
|
619
|
+
# @return [String]
|
620
|
+
# Any error messages returned by the `rmdir` command.
|
621
|
+
#
|
622
|
+
def rmdir(*arguments)
|
623
|
+
run('rmdir',*arguments)
|
624
|
+
end
|
625
|
+
resource_method :rmdir, [:shell_exec]
|
626
|
+
|
627
|
+
#
|
628
|
+
# Removes one or more files or directories.
|
629
|
+
#
|
630
|
+
# @param [Array<String>] arguments
|
631
|
+
# Additional arguments to pass to the `rm` command.
|
632
|
+
#
|
633
|
+
# @yield [line]
|
634
|
+
# If a block is given, it will be passed each line of output
|
635
|
+
# from the command.
|
636
|
+
#
|
637
|
+
# @yieldparam [String] line
|
638
|
+
# A line of output from the command.
|
639
|
+
#
|
640
|
+
# @return [String]
|
641
|
+
# The full output of the command.
|
642
|
+
#
|
643
|
+
# @see #exec
|
644
|
+
#
|
645
|
+
def rm(*arguments)
|
646
|
+
run('rm',*arguments)
|
647
|
+
end
|
648
|
+
resource_method :rm, [:shell_exec]
|
649
|
+
|
650
|
+
#
|
651
|
+
# Runs `rm -r`.
|
652
|
+
#
|
653
|
+
# @param [Array<String>] arguments
|
654
|
+
# Additional arguments for the `rm` command.
|
655
|
+
#
|
656
|
+
# @return [String]
|
657
|
+
# The full output of the command.
|
658
|
+
#
|
659
|
+
# @see #rm
|
660
|
+
#
|
661
|
+
def rm_r(*arguments)
|
662
|
+
rm('-r',*arguments)
|
663
|
+
end
|
664
|
+
resource_method :rm_r, [:shell_exec]
|
665
|
+
|
666
|
+
#
|
667
|
+
# Runs `rm -rf`.
|
668
|
+
#
|
669
|
+
# @param [Array<String>] arguments
|
670
|
+
# Additional arguments for the `rm` command.
|
671
|
+
#
|
672
|
+
# @return [String]
|
673
|
+
# The full output of the command.
|
674
|
+
#
|
675
|
+
# @see #rm
|
676
|
+
#
|
677
|
+
def rm_rf(*arguments)
|
678
|
+
rm('-rf',*arguments)
|
679
|
+
end
|
680
|
+
resource_method :rm_rf, [:shell_exec]
|
681
|
+
|
682
|
+
#
|
683
|
+
# Gets the current time from the shell.
|
684
|
+
#
|
685
|
+
# @return [Time]
|
686
|
+
# The current time returned by the shell.
|
687
|
+
#
|
688
|
+
def time
|
689
|
+
Time.parse(run('date').chomp)
|
690
|
+
end
|
691
|
+
resource_method :time, [:shell_exec]
|
692
|
+
|
693
|
+
#
|
694
|
+
# Gets the current time and date from the shell.
|
695
|
+
#
|
696
|
+
# @return [Date]
|
697
|
+
# The current data returned by the shell.
|
698
|
+
#
|
699
|
+
def date
|
700
|
+
time.to_date
|
701
|
+
end
|
702
|
+
resource_method :date, [:shell_exec]
|
703
|
+
|
704
|
+
#
|
705
|
+
# The ID information of the current user.
|
706
|
+
#
|
707
|
+
# @return [Hash{Symbol => String}]
|
708
|
+
# The ID information returned by the `id` command.
|
709
|
+
#
|
710
|
+
def id
|
711
|
+
hash = {}
|
712
|
+
|
713
|
+
run('id').split.each do |name_value|
|
714
|
+
name, value = name_value.split('=',2)
|
715
|
+
|
716
|
+
hash[name.to_sym] = value
|
717
|
+
end
|
718
|
+
|
719
|
+
return hash
|
720
|
+
end
|
721
|
+
resource_method :id, [:shell_exec]
|
722
|
+
|
723
|
+
#
|
724
|
+
# The UID of the current user.
|
725
|
+
#
|
726
|
+
# @return [Integer]
|
727
|
+
# The UID of the current user.
|
728
|
+
#
|
729
|
+
def uid
|
730
|
+
run('id','-u').to_i
|
731
|
+
end
|
732
|
+
resource_method :uid, [:shell_exec]
|
733
|
+
|
734
|
+
#
|
735
|
+
# The GID of the current user.
|
736
|
+
#
|
737
|
+
# @return [Integer]
|
738
|
+
# The GID of the current user.
|
739
|
+
#
|
740
|
+
def gid
|
741
|
+
run('id','-g').to_i
|
742
|
+
end
|
743
|
+
resource_method :gid, [:shell_exec]
|
744
|
+
|
745
|
+
#
|
746
|
+
# The name of the current user.
|
747
|
+
#
|
748
|
+
# @param [Array<String>] arguments
|
749
|
+
# Additional arguments to pass to the `whoami` command.
|
750
|
+
#
|
751
|
+
# @return [String]
|
752
|
+
# The name of the current user returned by the `whoami` command.
|
753
|
+
#
|
754
|
+
def whoami(*arguments)
|
755
|
+
run('whoami',*arguments).chomp
|
756
|
+
end
|
757
|
+
resource_method :whoami, [:shell_exec]
|
758
|
+
|
759
|
+
#
|
760
|
+
# Shows who is currently logged in.
|
761
|
+
#
|
762
|
+
# @param [Array<String>] arguments
|
763
|
+
# Additional arguments to pass to the `who` command.
|
764
|
+
#
|
765
|
+
# @return [String]
|
766
|
+
# The full output of the command.
|
767
|
+
#
|
768
|
+
# @see #exec
|
769
|
+
#
|
770
|
+
def who(*arguments)
|
771
|
+
run('who',*arguments)
|
772
|
+
end
|
773
|
+
resource_method :who, [:shell_exec]
|
774
|
+
|
775
|
+
#
|
776
|
+
# Similar to {#who} but runs the `w` command.
|
777
|
+
#
|
778
|
+
# @param [Array<String>] arguments
|
779
|
+
# Additional arguments to pass to the `w` command.
|
780
|
+
#
|
781
|
+
# @return [String]
|
782
|
+
# The full output of the command.
|
783
|
+
#
|
784
|
+
# @see #exec
|
785
|
+
#
|
786
|
+
def w(*arguments)
|
787
|
+
run('w',*arguments)
|
788
|
+
end
|
789
|
+
resource_method :w, [:shell_exec]
|
790
|
+
|
791
|
+
#
|
792
|
+
# Shows when users last logged in.
|
793
|
+
#
|
794
|
+
# @param [Array<String>] arguments
|
795
|
+
# Additional arguments to pass to the `lastlog` command.
|
796
|
+
#
|
797
|
+
# @return [String]
|
798
|
+
# The full output of the command.
|
799
|
+
#
|
800
|
+
# @see #exec
|
801
|
+
#
|
802
|
+
def lastlog(*arguments)
|
803
|
+
run('lastlog',*arguments)
|
804
|
+
end
|
805
|
+
resource_method :lastlog, [:shell_exec]
|
806
|
+
|
807
|
+
#
|
808
|
+
# Shows login failures.
|
809
|
+
#
|
810
|
+
# @param [Array<String>] arguments
|
811
|
+
# Additional arguments to pass to the `faillog` command.
|
812
|
+
#
|
813
|
+
# @yield [line]
|
814
|
+
# If a block is given, it will be passed each line of output
|
815
|
+
# from the command.
|
816
|
+
#
|
817
|
+
# @yieldparam [String] line
|
818
|
+
# A line of output from the command.
|
819
|
+
#
|
820
|
+
# @return [String]
|
821
|
+
# The full output of the command.
|
822
|
+
#
|
823
|
+
# @see #exec
|
824
|
+
#
|
825
|
+
def faillog(*arguments)
|
826
|
+
run('faillog',*arguments)
|
827
|
+
end
|
828
|
+
resource_method :faillog, [:shell_exec]
|
829
|
+
|
830
|
+
#
|
831
|
+
# Shows the current running processes.
|
832
|
+
#
|
833
|
+
# @param [Array<String>] arguments
|
834
|
+
# Additional arguments to pass to the `ps` command.
|
835
|
+
#
|
836
|
+
# @return [String]
|
837
|
+
# The full output of the command.
|
838
|
+
#
|
839
|
+
# @see #exec
|
840
|
+
#
|
841
|
+
def ps(*arguments)
|
842
|
+
run('ps',*arguments)
|
843
|
+
end
|
844
|
+
resource_method :ps, [:shell_exec]
|
845
|
+
|
846
|
+
#
|
847
|
+
# Runs `ps aux`.
|
848
|
+
#
|
849
|
+
# @param [Array<String>] arguments
|
850
|
+
# Additional arguments for the `ps` command.
|
851
|
+
#
|
852
|
+
# @return [String]
|
853
|
+
# The full output of the command.
|
854
|
+
#
|
855
|
+
# @see #ps
|
856
|
+
#
|
857
|
+
def ps_aux(*arguments)
|
858
|
+
ps('aux',*arguments)
|
859
|
+
end
|
860
|
+
resource_method :ps_aux, [:shell_exec]
|
861
|
+
|
862
|
+
#
|
863
|
+
# Kills a current running process.
|
864
|
+
#
|
865
|
+
# @param [Array<String>] arguments
|
866
|
+
# Additional arguments to pass to the `kill` command.
|
867
|
+
#
|
868
|
+
# @return [String]
|
869
|
+
# Output from the `kill` command.
|
870
|
+
#
|
871
|
+
def kill(*arguments)
|
872
|
+
run('kill',*arguments)
|
873
|
+
end
|
874
|
+
resource_method :kill, [:shell_exec]
|
875
|
+
|
876
|
+
#
|
877
|
+
# Shows information about network interfaces.
|
878
|
+
#
|
879
|
+
# @param [Array<String>] arguments
|
880
|
+
# Additional arguments to pass to the `ifconfig` command.
|
881
|
+
#
|
882
|
+
# @return [String]
|
883
|
+
# The full output of the command.
|
884
|
+
#
|
885
|
+
# @see #exec
|
886
|
+
#
|
887
|
+
def ifconfig(*arguments)
|
888
|
+
run('ifconfig',*arguments)
|
889
|
+
end
|
890
|
+
resource_method :ifconfig, [:shell_exec]
|
891
|
+
|
892
|
+
#
|
893
|
+
# Shows network connections.
|
894
|
+
#
|
895
|
+
# @param [Array<String>] arguments
|
896
|
+
# Additional arguments to pass to the `netstat` command.
|
897
|
+
#
|
898
|
+
# @return [String]
|
899
|
+
# The full output of the command.
|
900
|
+
#
|
901
|
+
# @see #exec
|
902
|
+
#
|
903
|
+
def netstat(*arguments)
|
904
|
+
run('netstat',*arguments)
|
905
|
+
end
|
906
|
+
resource_method :netstat, [:shell_exec]
|
907
|
+
|
908
|
+
#
|
909
|
+
# Runs `netstat -anp`.
|
910
|
+
#
|
911
|
+
# @param [Array<String>] arguments
|
912
|
+
# Additional arguments for the `netstat` command.
|
913
|
+
#
|
914
|
+
# @return [String]
|
915
|
+
# The full output of the command.
|
916
|
+
#
|
917
|
+
# @see #netstat
|
918
|
+
#
|
919
|
+
def netstat_anp(*arguments)
|
920
|
+
netstat('-anp',*arguments)
|
921
|
+
end
|
922
|
+
resource_method :netstat_anp, [:shell_exec]
|
923
|
+
|
924
|
+
#
|
925
|
+
# Pings an IP address.
|
926
|
+
#
|
927
|
+
# @param [Array<String>] arguments
|
928
|
+
# Additional arguments to pass to the `ping` command.
|
929
|
+
#
|
930
|
+
# @yield [line]
|
931
|
+
# If a block is given, it will be passed each line of output
|
932
|
+
# from the command.
|
933
|
+
#
|
934
|
+
# @yieldparam [String] line
|
935
|
+
# A line of output from the command.
|
936
|
+
#
|
937
|
+
# @return [String]
|
938
|
+
# The full output of the command.
|
939
|
+
#
|
940
|
+
# @see #exec
|
941
|
+
#
|
942
|
+
def ping(*arguments)
|
943
|
+
run('ping',*arguments)
|
944
|
+
end
|
945
|
+
resource_method :ping, [:shell_exec]
|
946
|
+
|
947
|
+
#
|
948
|
+
# Compiles some C source-code with `gcc`.
|
949
|
+
#
|
950
|
+
# @param [Array<String>] arguments
|
951
|
+
# Additional arguments to pass to the `gcc` command.
|
952
|
+
#
|
953
|
+
# @return [String]
|
954
|
+
# The full output of the command.
|
955
|
+
#
|
956
|
+
# @see #exec
|
957
|
+
#
|
958
|
+
def gcc(*arguments)
|
959
|
+
run('gcc',*arguments)
|
960
|
+
end
|
961
|
+
resource_method :gcc, [:shell_exec]
|
962
|
+
|
963
|
+
#
|
964
|
+
# Compiles some C source-code with `cc`.
|
965
|
+
#
|
966
|
+
# @param [Array<String>] arguments
|
967
|
+
# Additional arguments to pass to the `cc` command.
|
968
|
+
#
|
969
|
+
# @return [String]
|
970
|
+
# The full output of the command.
|
971
|
+
#
|
972
|
+
# @see #exec
|
973
|
+
#
|
974
|
+
def cc(*arguments)
|
975
|
+
run('cc',*arguments)
|
976
|
+
end
|
977
|
+
resource_method :cc, [:shell_exec]
|
978
|
+
|
979
|
+
#
|
980
|
+
# Runs a PERL script.
|
981
|
+
#
|
982
|
+
# @param [Array<String>] arguments
|
983
|
+
# Additional arguments to pass to the `perl` command.
|
984
|
+
#
|
985
|
+
# @return [String]
|
986
|
+
# The full output of the command.
|
987
|
+
#
|
988
|
+
# @see #exec
|
989
|
+
#
|
990
|
+
def perl(*arguments)
|
991
|
+
run('perl',*arguments)
|
992
|
+
end
|
993
|
+
resource_method :perl, [:shell_exec]
|
994
|
+
|
995
|
+
#
|
996
|
+
# Runs a Python script.
|
997
|
+
#
|
998
|
+
# @param [Array<String>] arguments
|
999
|
+
# Additional arguments to pass to the `python` command.
|
1000
|
+
#
|
1001
|
+
# @return [String]
|
1002
|
+
# The full output of the command.
|
1003
|
+
#
|
1004
|
+
# @see #exec
|
1005
|
+
#
|
1006
|
+
def python(*arguments)
|
1007
|
+
run('python',*arguments)
|
1008
|
+
end
|
1009
|
+
resource_method :python, [:shell_exec]
|
1010
|
+
|
1011
|
+
#
|
1012
|
+
# Runs a Ruby script.
|
1013
|
+
#
|
1014
|
+
# @param [Array<String>] arguments
|
1015
|
+
# Additional arguments to pass to the `ruby` command.
|
1016
|
+
#
|
1017
|
+
# @return [String]
|
1018
|
+
# The full output of the command.
|
1019
|
+
#
|
1020
|
+
# @see #exec
|
1021
|
+
#
|
1022
|
+
def ruby(*arguments)
|
1023
|
+
run('ruby',*arguments)
|
1024
|
+
end
|
1025
|
+
resource_method :ruby, [:shell_exec]
|
1026
|
+
|
1027
|
+
#
|
1028
|
+
# Starts an interactive Shell console.
|
1029
|
+
#
|
1030
|
+
def interact
|
1031
|
+
CLI::ShellShell.start(self)
|
1032
|
+
end
|
1033
|
+
|
1034
|
+
end
|
1035
|
+
end
|
1036
|
+
end
|
1037
|
+
end
|