name file | size | edit | permission | action |
---|---|---|---|---|
.env | 2733 KB | December 22 2024 06:20:07 | 0644 | |
404.html | 58370 KB | November 20 2024 15:32:22 | 0644 | |
502.html | 58368 KB | November 20 2024 15:32:22 | 0644 | |
Modules | - | December 11 2024 21:02:56 | 0755 | |
README.md | 4158 KB | February 14 2023 12:31:56 | 0644 | |
app | - | December 11 2024 17:57:48 | 0755 | |
artisan | 1686 KB | February 14 2023 12:31:56 | 0644 | |
bootstrap | - | December 11 2024 20:23:36 | 0755 | |
composer.json | 3761 KB | December 11 2024 22:15:00 | 0644 | |
composer.lock | 512048 KB | December 11 2024 22:13:28 | 0644 | |
config | - | June 15 2025 02:09:36 | 0755 | |
database | - | December 05 2024 20:18:12 | 0755 | |
dfsdf dfds fd fds findex.html | 1420 KB | November 20 2024 15:32:24 | 0644 | |
error_log | 23854037 KB | July 18 2025 23:53:42 | 0644 | |
firoz | - | December 23 2024 13:24:46 | 0755 | |
index.php | 1667 KB | December 14 2024 05:20:36 | 0644 | |
lang | - | December 11 2024 21:02:48 | 0755 | |
modules_statuses.json | 472 KB | November 20 2024 15:32:24 | 0644 | |
mpos | - | March 31 2025 02:36:31 | 0755 | |
package.json | 226 KB | February 14 2023 12:31:56 | 0644 | |
phpunit.xml | 1146 KB | February 14 2023 12:31:56 | 0644 | |
public | - | March 31 2025 02:36:31 | 0755 | |
resources | - | December 11 2024 21:10:22 | 0755 | |
routes | - | June 15 2025 02:09:31 | 0755 | |
storage | - | December 11 2024 21:12:44 | 0755 | |
tests | - | December 05 2024 20:18:12 | 0755 | |
vendor | - | December 11 2024 22:13:30 | 0755 | |
vite.config.js | 263 KB | February 14 2023 12:31:56 | 0644 |
* login('username', $key)) {
* exit('Login Failed');
* }
*
* echo $ssh->read('username@username:~$');
* $ssh->write("ls -la\n");
* echo $ssh->read('username@username:~$');
* ?>
*
*
* @author Jim Wigginton '; $stop = ''; } echo $start . $this->format_log([$message], [$message_number]) . $stop; @flush(); @ob_flush(); break; // basically the same thing as self::LOG_REALTIME with the caveat that NET_SSH2_LOG_REALTIME_FILENAME // needs to be defined and that the resultant log file will be capped out at self::LOG_MAX_SIZE. // the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily // at the beginning of the file case self::LOG_REALTIME_FILE: if (!isset($realtime_log_file)) { // PHP doesn't seem to like using constants in fopen() $filename = NET_SSH2_LOG_REALTIME_FILENAME; $fp = fopen($filename, 'w'); $realtime_log_file = $fp; } if (!is_resource($realtime_log_file)) { break; } $entry = $this->format_log([$message], [$message_number]); if ($realtime_log_wrap) { $temp = "<<< START >>>\r\n"; $entry .= $temp; fseek($realtime_log_file, ftell($realtime_log_file) - strlen($temp)); } $realtime_log_size += strlen($entry); if ($realtime_log_size > self::LOG_MAX_SIZE) { fseek($realtime_log_file, 0); $realtime_log_size = strlen($entry); $realtime_log_wrap = true; } fputs($realtime_log_file, $entry); } } /** * Sends channel data * * Spans multiple SSH_MSG_CHANNEL_DATAs if appropriate * * @param int $client_channel * @param string $data * @return void */ protected function send_channel_packet($client_channel, $data) { if ( isset($this->channel_buffers_write[$client_channel]) && strpos($data, $this->channel_buffers_write[$client_channel]) === 0 ) { // if buffer holds identical initial data content, resume send from the unmatched data portion $data = substr($data, strlen($this->channel_buffers_write[$client_channel])); } else { $this->channel_buffers_write[$client_channel] = ''; } while (strlen($data)) { if (!$this->window_size_client_to_server[$client_channel]) { // using an invalid channel will let the buffers be built up for the valid channels $this->get_channel_packet(-$client_channel); if ($this->isTimeout()) { throw new TimeoutException('Timed out waiting for server'); } elseif (!$this->window_size_client_to_server[$client_channel]) { throw new \RuntimeException('Data window was not adjusted'); } } /* The maximum amount of data allowed is determined by the maximum packet size for the channel, and the current window size, whichever is smaller. -- http://tools.ietf.org/html/rfc4254#section-5.2 */ $max_size = min( $this->packet_size_client_to_server[$client_channel], $this->window_size_client_to_server[$client_channel] ); $temp = Strings::shift($data, $max_size); $packet = Strings::packSSH2( 'CNs', NET_SSH2_MSG_CHANNEL_DATA, $this->server_channels[$client_channel], $temp ); $this->window_size_client_to_server[$client_channel] -= strlen($temp); $this->send_binary_packet($packet); $this->channel_buffers_write[$client_channel] .= $temp; } unset($this->channel_buffers_write[$client_channel]); } /** * Closes and flushes a channel * * \phpseclib3\Net\SSH2 doesn't properly close most channels. For exec() channels are normally closed by the server * and for SFTP channels are presumably closed when the client disconnects. This functions is intended * for SCP more than anything. * * @param int $client_channel * @param bool $want_reply * @return void */ private function close_channel($client_channel, $want_reply = false) { // see http://tools.ietf.org/html/rfc4254#section-5.3 $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel])); if (!$want_reply) { $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$client_channel])); } $this->channel_status[$client_channel] = NET_SSH2_MSG_CHANNEL_CLOSE; $this->channelCount--; $this->curTimeout = 5; while (!is_bool($this->get_channel_packet($client_channel))) { } if ($want_reply) { $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$client_channel])); } $this->close_channel_bitmap($client_channel); } /** * Maintains execution state bitmap in response to channel closure * * @param int $client_channel The channel number to maintain closure status of * @return void */ private function close_channel_bitmap($client_channel) { switch ($client_channel) { case self::CHANNEL_SHELL: // Shell status has been maintained in the bitmap for backwards // compatibility sake, but can be removed going forward if ($this->bitmap & self::MASK_SHELL) { $this->bitmap &= ~self::MASK_SHELL; } break; } } /** * Disconnect * * @param int $reason * @return false */ protected function disconnect_helper($reason) { if ($this->bitmap & self::MASK_DISCONNECT) { // Disregard subsequent disconnect requests return false; } $this->bitmap |= self::MASK_DISCONNECT; if ($this->isConnected()) { $data = Strings::packSSH2('CNss', NET_SSH2_MSG_DISCONNECT, $reason, '', ''); try { $this->send_binary_packet($data); } catch (\Exception $e) { } } $this->reset_connection(); return false; } /** * Define Array * * Takes any number of arrays whose indices are integers and whose values are strings and defines a bunch of * named constants from it, using the value as the name of the constant and the index as the value of the constant. * If any of the constants that would be defined already exists, none of the constants will be defined. * * @param mixed[] ...$args * @access protected */ protected static function define_array(...$args) { foreach ($args as $arg) { foreach ($arg as $key => $value) { if (!defined($value)) { define($value, $key); } else { break 2; } } } } /** * Returns a log of the packets that have been sent and received. * * Returns a string if NET_SSH2_LOGGING == self::LOG_COMPLEX, an array if NET_SSH2_LOGGING == self::LOG_SIMPLE and false if !defined('NET_SSH2_LOGGING') * * @return array|false|string */ public function getLog() { if (!defined('NET_SSH2_LOGGING')) { return false; } switch (NET_SSH2_LOGGING) { case self::LOG_SIMPLE: return $this->message_number_log; case self::LOG_COMPLEX: $log = $this->format_log($this->message_log, $this->message_number_log); return PHP_SAPI == 'cli' ? $log : '
' . $log . ''; default: return false; } } /** * Formats a log for printing * * @param array $message_log * @param array $message_number_log * @return string */ protected function format_log(array $message_log, array $message_number_log) { $output = ''; for ($i = 0; $i < count($message_log); $i++) { $output .= $message_number_log[$i]; $current_log = $message_log[$i]; $j = 0; if (strlen($current_log)) { $output .= "\r\n"; } do { if (strlen($current_log)) { $output .= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0 '; } $fragment = Strings::shift($current_log, $this->log_short_width); $hex = substr(preg_replace_callback('#.#s', function ($matches) { return $this->log_boundary . str_pad(dechex(ord($matches[0])), 2, '0', STR_PAD_LEFT); }, $fragment), strlen($this->log_boundary)); // replace non ASCII printable characters with dots // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters // also replace < with a . since < messes up the output on web browsers $raw = preg_replace('#[^\x20-\x7E]|<#', '.', $fragment); $output .= str_pad($hex, $this->log_long_width - $this->log_short_width, ' ') . $raw . "\r\n"; $j++; } while (strlen($current_log)); $output .= "\r\n"; } return $output; } /** * Helper function for agent->on_channel_open() * * Used when channels are created to inform agent * of said channel opening. Must be called after * channel open confirmation received * */ private function on_channel_open() { if (isset($this->agent)) { $this->agent->registerChannelOpen($this); } } /** * Returns the first value of the intersection of two arrays or false if * the intersection is empty. The order is defined by the first parameter. * * @param array $array1 * @param array $array2 * @return mixed False if intersection is empty, else intersected value. */ private static function array_intersect_first(array $array1, array $array2) { foreach ($array1 as $value) { if (in_array($value, $array2)) { return $value; } } return false; } /** * Returns all errors / debug messages on the SSH layer * * If you are looking for messages from the SFTP layer, please see SFTP::getSFTPErrors() * * @return string[] */ public function getErrors() { return $this->errors; } /** * Returns the last error received on the SSH layer * * If you are looking for messages from the SFTP layer, please see SFTP::getLastSFTPError() * * @return string */ public function getLastError() { $count = count($this->errors); if ($count > 0) { return $this->errors[$count - 1]; } } /** * Return the server identification. * * @return string|false */ public function getServerIdentification() { $this->connect(); return $this->server_identifier; } /** * Returns a list of algorithms the server supports * * @return array */ public function getServerAlgorithms() { $this->connect(); return [ 'kex' => $this->kex_algorithms, 'hostkey' => $this->server_host_key_algorithms, 'client_to_server' => [ 'crypt' => $this->encryption_algorithms_client_to_server, 'mac' => $this->mac_algorithms_client_to_server, 'comp' => $this->compression_algorithms_client_to_server, 'lang' => $this->languages_client_to_server ], 'server_to_client' => [ 'crypt' => $this->encryption_algorithms_server_to_client, 'mac' => $this->mac_algorithms_server_to_client, 'comp' => $this->compression_algorithms_server_to_client, 'lang' => $this->languages_server_to_client ] ]; } /** * Returns a list of KEX algorithms that phpseclib supports * * @return array */ public static function getSupportedKEXAlgorithms() { $kex_algorithms = [ // Elliptic Curve Diffie-Hellman Key Agreement (ECDH) using // Curve25519. See doc/[email protected] in the // libssh repository for more information. 'curve25519-sha256', '[email protected]', 'ecdh-sha2-nistp256', // RFC 5656 'ecdh-sha2-nistp384', // RFC 5656 'ecdh-sha2-nistp521', // RFC 5656 'diffie-hellman-group-exchange-sha256',// RFC 4419 'diffie-hellman-group-exchange-sha1', // RFC 4419 // Diffie-Hellman Key Agreement (DH) using integer modulo prime // groups. 'diffie-hellman-group14-sha256', 'diffie-hellman-group14-sha1', // REQUIRED 'diffie-hellman-group15-sha512', 'diffie-hellman-group16-sha512', 'diffie-hellman-group17-sha512', 'diffie-hellman-group18-sha512', 'diffie-hellman-group1-sha1', // REQUIRED ]; return $kex_algorithms; } /** * Returns a list of host key algorithms that phpseclib supports * * @return array */ public static function getSupportedHostKeyAlgorithms() { return [ 'ssh-ed25519', // https://tools.ietf.org/html/draft-ietf-curdle-ssh-ed25519-02 'ecdsa-sha2-nistp256', // RFC 5656 'ecdsa-sha2-nistp384', // RFC 5656 'ecdsa-sha2-nistp521', // RFC 5656 'rsa-sha2-256', // RFC 8332 'rsa-sha2-512', // RFC 8332 'ssh-rsa', // RECOMMENDED sign Raw RSA Key 'ssh-dss' // REQUIRED sign Raw DSS Key ]; } /** * Returns a list of symmetric key algorithms that phpseclib supports * * @return array */ public static function getSupportedEncryptionAlgorithms() { $algos = [ // from