commit 058ef57305e72ba37e3bf4906c74c5c0a9d21e69 Author: JianMiau Date: Wed Jul 27 16:33:37 2022 +0800 [add] First diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9aaca86 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +composer.phar +/vendor/ \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..8fd8860 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,22 @@ +{ + // 使用 IntelliSense 以得知可用的屬性。 + // 暫留以檢視現有屬性的描述。 + // 如需詳細資訊,請瀏覽: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Listen for Xdebug", + "type": "php", + "request": "launch", + "port": 9010 + }, + { + "name": "Launch currently open script", + "type": "php", + "request": "launch", + "program": "${file}", + "cwd": "${fileDirname}", + "port": 9010 + } + ] +} \ No newline at end of file diff --git a/Publisher b/Publisher new file mode 100644 index 0000000..76d1389 --- /dev/null +++ b/Publisher @@ -0,0 +1,27 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFQAAAAdzc2gtcn +NhAAAAASMAAAEBAN+nL0heoNxH1P2d9GfI7FQHHC8YMCe4C8t4kmUz3KP9jiF5kSVezId0 +N/G3pOby4iB+5eKtLO9CfpUMOFXjPigSzsFLuefIWHUzCQ/3BgldBJUO1d8kW+1F6sCxr5 +Vfaryau5CjmeA8A8PLAUHMueRWvj6LDPwmL0nDrEwSsJgWxcVCUlku/B87GQ738gLo5mWB ++U7zRf9KM/41aRJeOVv1bqnbu0S7HWn8iDx5d35IP3DkJPef9jxXV1T81xeyLIR+BuSYwp +umnhyewHL4uB5Ht32U71h554KtdMXWZa2rFW2RSBoX0L7aMb3mf1CiVDoCh0+XJ0uGNiH+ +2xLBaokAAAPQvi1HcL4tR3AAAAAHc3NoLXJzYQAAAQEA36cvSF6g3EfU/Z30Z8jsVAccLx +gwJ7gLy3iSZTPco/2OIXmRJV7Mh3Q38bek5vLiIH7l4q0s70J+lQw4VeM+KBLOwUu558hY +dTMJD/cGCV0ElQ7V3yRb7UXqwLGvlV9qvJq7kKOZ4DwDw8sBQcy55Fa+PosM/CYvScOsTB +KwmBbFxUJSWS78HzsZDvfyAujmZYH5TvNF/0oz/jVpEl45W/Vuqdu7RLsdafyIPHl3fkg/ +cOQk95/2PFdXVPzXF7IshH4G5JjCm6aeHJ7Acvi4Hke3fZTvWHnngq10xdZlrasVbZFIGh +fQvtoxveZ/UKJUOgKHT5cnS4Y2If7bEsFqiQAAAAEjAAABABmPcx42s0xf+xWrpudKKaM0 +AziVDNFW3MbL83lHwXHT1bquzsJxO/I5KvcNrHIqYvxmRiiI0e91UEuMXjWzkhM1WXUtOd +FYuab+hLFeD1GG+TWbS6R5LxPNeeoi737JE4NE4jxqd/xeoVg0dSwXZbOyJF7rUfDua83q +ehdSl9bd0SptDh88KXGUN1aAvgBd6bIwFIr/dw4FvdoqlabZwbqT8gic/Cpdpnr2z/JV5G +TZVfX6bWAZV9cimUgmEh5HlXJCniM0y45PjlDMS7zDGWQ4MhcTjHmYipf0eDg7/xu38O1q +OoDKMv7Be7+6WvvCSnd+iblJkzcxwxft2MA3CYsAAACALmEnkyNDoVMj6jgIqyKlDdttnY +lKJYSwpMpkddNrb4LQnwaCDWh5AC0Libc45S/EQNs09HHEReRSHb3nNPpkk9VZaEo/4ZJo +bUMMiirep8JdZWXoKn7c6NMUZhRbGLA/kRUCF8olPxIeQLI5yFDGG+btALfiyLIMeqmLU9 +P05yoAAACBAP9VhAtjVJjfAtkXwVa07Pn1EDBMFU6sofqjVKJoLcArBvn3/WN9DTkHh0Do +HMEF5pSHcaXCFClyEbMH7KvA3NE0e/ovktNVZgncLj11NL+mXMSodhNnnXhbkPvb+Zm6C6 +qjMCp2rkLXT0ybZgpiKBrB/ha7FHpVw2MW/pnJvOB5AAAAgQDgPIQLZIv4nmdbwlAcysYv +mU0VQqKll/X8JewpNj8aEF/u5oC5VPpzroWry+0oBfP6wSNCLK4ML9bnFcMMzeL/qDslAP +f6KQh2/XTsShjaSv88izPOyOWydYFc/c/TwRXurP+dvIBPsm3qVOHY05Yt4nE7fz7k0s9n ++Z8YtyL2kQAAABlPcGVuU1NILXJzYS1pbXBvcnQtMDcyNzIyAQIDBA== +-----END OPENSSH PRIVATE KEY----- diff --git a/authorized_keys b/authorized_keys new file mode 100644 index 0000000..43c48ea --- /dev/null +++ b/authorized_keys @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA36cvSF6g3EfU/Z30Z8jsVAccLxgwJ7gLy3iSZTPco/2OIXmRJV7Mh3Q38bek5vLiIH7l4q0s70J+lQw4VeM+KBLOwUu558hYdTMJD/cGCV0ElQ7V3yRb7UXqwLGvlV9qvJq7kKOZ4DwDw8sBQcy55Fa+PosM/CYvScOsTBKwmBbFxUJSWS78HzsZDvfyAujmZYH5TvNF/0oz/jVpEl45W/Vuqdu7RLsdafyIPHl3fkg/cOQk95/2PFdXVPzXF7IshH4G5JjCm6aeHJ7Acvi4Hke3fZTvWHnngq10xdZlrasVbZFIGhfQvtoxveZ/UKJUOgKHT5cnS4Y2If7bEsFqiQ== \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..e54d5c8 --- /dev/null +++ b/composer.json @@ -0,0 +1,17 @@ +{ + "name": "user/ssh", + "autoload": { + "psr-4": { + "User\\Ssh\\": "src/" + } + }, + "authors": [ + { + "name": "JianMiau", + "email": "bir840124@gmail.com" + } + ], + "require": { + "phpseclib/phpseclib": "^3.0" + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..2308719 --- /dev/null +++ b/composer.lock @@ -0,0 +1,245 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "2c9cf6f81c7570ab59150455f1cd1bfe", + "packages": [ + { + "name": "paragonie/constant_time_encoding", + "version": "v2.6.3", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "58c3f47f650c94ec05a151692652a868995d2938" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938", + "reference": "58c3f47f650c94ec05a151692652a868995d2938", + "shasum": "" + }, + "require": { + "php": "^7|^8" + }, + "require-dev": { + "phpunit/phpunit": "^6|^7|^8|^9", + "vimeo/psalm": "^1|^2|^3|^4" + }, + "type": "library", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" + } + ], + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "keywords": [ + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" + }, + "time": "2022-06-14T06:56:20+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.100", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "shasum": "" + }, + "require": { + "php": ">= 7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2020-10-15T08:29:30+00:00" + }, + { + "name": "phpseclib/phpseclib", + "version": "3.0.14", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "2f0b7af658cbea265cbb4a791d6c29a6613f98ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/2f0b7af658cbea265cbb4a791d6c29a6613f98ef", + "reference": "2f0b7af658cbea265cbb4a791d6c29a6613f98ef", + "shasum": "" + }, + "require": { + "paragonie/constant_time_encoding": "^1|^2", + "paragonie/random_compat": "^1.4|^2.0|^9.99.99", + "php": ">=5.6.1" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib3\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "support": { + "issues": "https://github.com/phpseclib/phpseclib/issues", + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.14" + }, + "funding": [ + { + "url": "https://github.com/terrafrost", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpseclib", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", + "type": "tidelift" + } + ], + "time": "2022-04-04T05:15:45+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/index.php b/index.php new file mode 100644 index 0000000..8bc9b7e --- /dev/null +++ b/index.php @@ -0,0 +1,42 @@ +打包機遊戲列表"); +echo "打包機遊戲列表
"; + +$ssh = new SSH2('192.168.5.108', 22); +$public_key = file_get_contents(__DIR__."\authorized_keys"); +$private_key = file_get_contents(__DIR__."\Publisher"); +$key = PublicKeyLoader::load($private_key); + +if ($ssh->login('Publisher', $key)) { + // echo('Connected'); +} else { + die('Login Failed'); +} + +$dir = $ssh->exec('dir /b/on D:\Casino-Core-Type2\assets\Game'); +$dirs = explode("\n",$dir); + +function lensort($a,$b){ + return strlen($a)-strlen($b); +} +usort($dirs,'lensort'); + +for ( $i=0 ; $iexec('dir /b/on D:\Casino-Core-Type2\assets\Game\\'.$dirname); + $gamedirs = explode("\n",$gamedir); + if ( count($gamedirs) > 2 ) { + echo $dirname . "
"; + } + } +} +?> \ No newline at end of file diff --git a/ssh2.php b/ssh2.php new file mode 100644 index 0000000..e3eec68 --- /dev/null +++ b/ssh2.php @@ -0,0 +1,140 @@ +host = $host; + } + + if ($port != '') { + $this->port = $port; + } + + if ($use_pubkey_file != '') { + $this->use_pubkey_file = $use_pubkey_file; + } + + $methods = []; + if ($this->use_pubkey_file) { + // $methods['hostkey'] = 'ssh-rsa'; + $methods = array( + 'hostkey'=>'ssh-rsa,ssh-dss', + // 'kex' => 'diffie-hellman-group-exchange-sha256', + 'client_to_server' => array( + 'crypt' => 'aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-cbc,blowfish-cbc', + 'comp' => 'none'), + 'server_to_client' => array( + 'crypt' => 'aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-cbc,blowfish-cbc', + 'comp' => 'none')); + } + // $this->con = ssh2_connect($this->host, $this->port); + $this->con = ssh2_connect($this->host, $this->port, $methods); + if (!$this->con) { + $this->log .= "Connection failed !"; + } + } + + public function authKey($pubkey_filePath, $privkey_file_filePath) + { + + if ($pubkey_filePath == '') { + return; + } + + if ($privkey_file_filePath == '') { + return; + } + + $rc = ssh2_auth_pubkey_file($this->con, $this->user, $pubkey_filePath, $privkey_file_filePath); + return; + } + + public function authPassword($user = '', $password = '') + { + + if ($user != '') { + $this->user = $user; + } + + if ($password != '') { + $this->password = $password; + } + + if (!ssh2_auth_password($this->con, $this->user, $this->password)) { + $this->log .= "Authorization failed !"; + } + } + + public function openShell($shell_type = '') + { + + if ($shell_type != '') { + $this->shell_type = $shell_type; + } + + $this->shell = ssh2_shell($this->con, $this->shell_type); + if (!$this->shell) { + $this->log .= " Shell connection failed !"; + } + + stream_set_blocking($this->shell, true); + } + + public function writeShell($command = '') + { + + fwrite($this->shell, $command . "\n"); + } + + public function cmdExec() + { + + $argc = func_num_args(); + $argv = func_get_args(); + + $cmd = ''; + for ($i = 0; $i < $argc; $i++) { + if ($i != ($argc - 1)) { + $cmd .= $argv[$i] . " && "; + } else { + $cmd .= $argv[$i]; + } + } + echo $cmd; + + $stream = ssh2_exec($this->con, $cmd); + stream_set_blocking($stream, true); + return stream_get_contents($stream); + } + + public function getLog() + { + return $this->log; + } + + public function getResult() + { + $contents = ''; + while (!feof($this->shell)) { + $contents .= fgets($this->shell); + } + return $contents; + } +}