1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
/** |
4
|
|
|
* --------------------------------------------------------------------------------------------------------------------- |
5
|
|
|
* DESCRIPTION |
6
|
|
|
* --------------------------------------------------------------------------------------------------------------------- |
7
|
|
|
* This file contains the example of executing set of multiple commands. |
8
|
|
|
* --------------------------------------------------------------------------------------------------------------------- |
9
|
|
|
*/ |
10
|
|
|
|
11
|
|
|
require __DIR__ . '/../vendor/autoload.php'; |
12
|
|
|
|
13
|
|
|
use Dazzle\Loop\Model\SelectLoop; |
14
|
|
|
use Dazzle\Loop\Loop; |
15
|
|
|
use Dazzle\SSH\Auth\SSH2Password; |
16
|
|
|
use Dazzle\SSH\SSH2; |
17
|
|
|
use Dazzle\SSH\SSH2Config; |
18
|
|
|
use Dazzle\SSH\SSH2DriverInterface; |
19
|
|
|
use Dazzle\SSH\SSH2Interface; |
20
|
|
|
use Dazzle\SSH\SSH2ResourceInterface; |
21
|
|
|
|
22
|
|
|
function executeCommand(SSH2DriverInterface $shell, $shellCommand) { |
23
|
|
|
|
24
|
|
|
$buffer = ''; |
25
|
|
|
$command = $shell->open(); |
26
|
|
|
$command->write($shellCommand); |
27
|
|
|
$command->on('data', function(SSH2ResourceInterface $command, $data) use(&$buffer) { |
28
|
|
|
$buffer .= $data; |
29
|
|
|
}); |
30
|
|
|
$command->on('end', function(SSH2ResourceInterface $command) use(&$buffer) { |
31
|
|
|
echo "# COMMAND RETURNED:\n"; |
32
|
|
|
echo $buffer; |
33
|
|
|
$command->close(); |
34
|
|
|
}); |
35
|
|
|
} |
36
|
|
|
|
37
|
|
|
$user = getenv('TEST_USER') ? getenv('TEST_USER') : 'Dazzle'; |
38
|
|
|
$pass = getenv('TEST_PASS') ? getenv('TEST_PASS') : 'Dazzle-1234'; |
39
|
|
|
|
40
|
|
|
$loop = new Loop(new SelectLoop); |
41
|
|
|
$auth = new SSH2Password($user, $pass); |
42
|
|
|
$config = new SSH2Config(); |
43
|
|
|
$ssh2 = new SSH2($auth, $config, $loop); |
44
|
|
|
|
45
|
|
|
$ssh2->on('connect:shell', function(SSH2DriverInterface $shell) use($ssh2, $loop) { |
46
|
|
|
echo "# CONNECTED SHELL\n"; |
47
|
|
|
|
48
|
|
|
$commands = [ 'ls -la', 'pwd' ]; |
49
|
|
|
$commandsRemain = count($commands); |
50
|
|
|
|
51
|
|
|
$shell->on('resource:close', function(SSH2DriverInterface $shell) use(&$commandsRemain) { |
52
|
|
|
if (--$commandsRemain === 0) { |
53
|
|
|
$shell->disconnect(); |
54
|
|
|
} |
55
|
|
|
}); |
56
|
|
|
|
57
|
|
|
foreach ($commands as $command) { |
58
|
|
|
executeCommand($shell, $command); |
59
|
|
|
} |
60
|
|
|
}); |
61
|
|
|
|
62
|
|
|
$ssh2->on('disconnect:shell', function(SSH2DriverInterface $shell) use($ssh2) { |
63
|
|
|
echo "# DISCONNECTED SHELL\n"; |
64
|
|
|
$ssh2->disconnect(); |
65
|
|
|
}); |
66
|
|
|
|
67
|
|
|
$ssh2->on('connect', function(SSH2Interface $ssh2) { |
68
|
|
|
echo "# CONNECTED\n"; |
69
|
|
|
$ssh2->createDriver(SSH2::DRIVER_SHELL) |
70
|
|
|
->connect(); |
71
|
|
|
}); |
72
|
|
|
|
73
|
|
|
$ssh2->on('disconnect', function(SSH2Interface $ssh2) use($loop) { |
74
|
|
|
echo "# DISCONNECTED\n"; |
75
|
|
|
$loop->stop(); |
76
|
|
|
}); |
77
|
|
|
|
78
|
|
|
$loop->onTick(function() use($ssh2) { |
79
|
|
|
$ssh2->connect(); |
80
|
|
|
}); |
81
|
|
|
|
82
|
|
|
$loop->start(); |
83
|
|
|
|