Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ver:2.0.30 Net/SSH2.php _get_binary_packet() and _filter() call each other recursively. #1644

Closed
Rafeethu opened this issue Apr 22, 2021 · 15 comments

Comments

@Rafeethu
Copy link

I have a Laravel 6 app which users SFTP to write content. once in a while the i'm getting the below error.

Connection closed prematurely {"exception":"[object] (ErrorException(code: 0): Connection closed prematurely at /var/www/app/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:3389)
[stacktrace]
#0 [internal function]: Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError()
#1 /var/www/app/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php(3389): user_error()
#2 /var/www/app/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php(3500): phpseclib\\Net\\SSH2->_get_binary_packet()
#3 /var/www/app/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php(3475): phpseclib\\Net\\SSH2->_filter()
#4 /var/www/app/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php(3500): phpseclib\\Net\\SSH2->_get_binary_packet()
#5 /var/www/app/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php(3475): phpseclib\\Net\\SSH2->_filter()
...
#245 /var/www/app/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php(3746): phpseclib\\Net\\SSH2->_get_binary_packet()
#246 /var/www/app/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php(3065): phpseclib\\Net\\SSH2->_get_channel_packet()
#247 /var/www/app/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php(1391): phpseclib\\Net\\SFTP->_get_sftp_packet()
#248 /var/www/app/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php(1280): phpseclib\\Net\\SFTP->_stat()
#249 /var/www/app/vendor/league/flysystem-sftp/src/SftpAdapter.php(548): phpseclib\\Net\\SFTP->stat()
#250 /var/www/app/vendor/league/flysystem-sftp/src/SftpAdapter.php(539): League\\Flysystem\\Sftp\\SftpAdapter->getMetadata()
#251 /var/www/app/vendor/league/flysystem/src/Filesystem.php(57): League\\Flysystem\\Sftp\\SftpAdapter->has()
#252 /var/www/app/vendor/league/flysystem/src/Filesystem.php(98): League\\Flysystem\\Filesystem->has()
#253 /var/www/app/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php(225): League\\Flysystem\\Filesystem->put()

here we can see the function _get_binary_packet() and _filter() call each other recursively.

The SFTP file write task is inside a Background Job which is managed using Redis que.
After this error the subsequent Sftp put requests are not working.

I need to restart the laravel queue for the system to start working again. But the error popups after some time.

Machine : Ubuntu Linux 20.04
Apache : 2.4.46
php : 7.4.12
redis : 5.0.7

@Rafeethu Rafeethu changed the title Ver:2.0 Net/SSH2.php _get_binary_packet() and _filter() call each other recursively. Ver:2.0.30 Net/SSH2.php _get_binary_packet() and _filter() call each other recursively. Apr 22, 2021
@terrafrost
Copy link
Member

Sorry about the delay - I'm not sure how this slipped past my radar.

Anyway, can you post the SSH logs? You can get them by doing define('NET_SSH2_LOGGING', 2) at the top and then echo $ssh->getLog() after the error.

Thanks!

@Rafeethu
Copy link
Author

please find the log. i have to remove some areas as the log contained file data I suppose.

-> NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0s)
00000000  00:00:00:00:00:00:00:3a:00:00:00:36:11:00:00:00  .......:...6....
00000010  01:00:00:00:2d:2f:58:4d:4c:5f:4c:49:4e:4b:2f:58  ....-/XML_LINK/X
00000020  4d:4c:2f:48:43:43:50:2f:53:50:2d:44:31:37:2f:31  ML/HCCP/SP-D17/1
00000030  34:37:2f:53:65:73:73:69:6f:6e:20:30:31:2e:6a:73  47/Session 01.js
00000040  6f:6e                                            on

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.2095, network: 0.0001s)
00000000  00:00:01:00:00:00:00:24:00:00:00:20:65:00:00:00  .......$... e...
00000010  01:00:00:00:02:00:00:00:0d:4e:6f:20:73:75:63:68  .........No such
00000020  20:66:69:6c:65:2e:00:00:00:02:65:6e               file.....en

-> NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0s)
00000000  00:00:00:00:00:00:00:2a:00:00:00:26:11:00:00:00  .......*...&....
00000010  01:00:00:00:1d:2f:58:4d:4c:5f:4c:49:4e:4b:2f:58  ...../XML_LINK/X
00000020  4d:4c:2f:48:43:43:50:2f:53:50:2d:44:31:37:2f:31  ML/HCCP/SP-D17/1
00000030  34:37                                            47

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.2206, network: 0.0001s)
00000000  00:00:01:00:00:00:00:29:00:00:00:25:69:00:00:00  .......)...%i...
00000010  01:00:00:00:0f:00:00:00:00:00:00:00:00:00:00:00  ................
00000020  00:00:00:00:00:00:00:41:c0:60:8a:60:76:60:8a:60  .......A.`.`v`.`
00000030  76                                               v

-> NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0s)
00000000  00:00:00:00:00:00:00:42:00:00:00:3e:03:00:00:00  .......B...>....
00000010  01:00:00:00:2d:2f:58:4d:4c:5f:4c:49:4e:4b:2f:58  ....-/XML_LINK/X
00000020  4d:4c:2f:48:43:43:50:2f:53:50:2d:44:31:37:2f:31  ML/HCCP/SP-D17/1
00000030  34:37:2f:53:65:73:73:69:6f:6e:20:30:31:2e:6a:73  47/Session 01.js
00000040  6f:6e:00:00:00:1a:00:00:00:00                    on........

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.2219, network: 0.0001s)
00000000  00:00:01:00:00:00:00:15:00:00:00:11:66:00:00:00  ............f...
00000010  01:00:00:00:08:30:61:37:63:34:39:62:30           .....0a7c49b0

-> NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:00:00:00:00:bd:00:00:00:b9:06:00:00:00  ................
00000010  00:00:00:00:08:30:61:37:63:34:39:62:30:00:00:00  .....0a7c49b0...
00000020  00:00:00:00:00:00:00:00:9c:7b:22:61:6c:6c:6f:63  .........{"alloc
00000030  61:74:69:6f:6e:5f:69:64:22:3a:31:34:37:2c:22:73  ation_id":147,"s
00000040  74:61:74:75:73:5f:75:70:64:61:74:65:5f:75:72:6c  tatus_update_url
00000050  22:3a:22:68:74:74:70:73:3a:5c:2f:5c:2f:  		   ":"https:\/\/
000000a0  6e:61:6c:2d:70:72:6f:63:65:73:73:5c:2f:31:34:37  nal-process\/147
000000b0  5c:2f:48:59:50:45:52:4c:49:4e:4b:5c:2f:73:74:61  \/HYPERLINK\/sta
000000c0  74:75:73:22:7d                                   tus"}

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.207, network: 0.0001s)
00000000  00:00:01:00:00:00:00:17:00:00:00:13:65:00:00:00  ............e...
00000010  00:00:00:00:00:00:00:00:00:00:00:00:02:65:6e     .............en

-> NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:00:00:00:00:15:00:00:00:11:04:00:00:00  ................
00000010  01:00:00:00:08:30:61:37:63:34:39:62:30           .....0a7c49b0

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.2486, network: 0.0001s)
00000000  00:00:01:00:00:00:00:17:00:00:00:13:65:00:00:00  ............e...
00000010  01:00:00:00:00:00:00:00:00:00:00:00:02:65:6e     .............en

-> NET_SSH2_MSG_CHANNEL_DATA (since last: 9745.5819, network: 0s)
00000000  00:00:00:00:00:00:00:3e:00:00:00:3a:11:00:00:00  .......>...:....
00000010  01:00:00:00:31:2f:58:4d:4c:5f:4c:49:4e:4b:2f:58  ....1/XML_LINK/X
00000020  4d:4c:5f:4f:55:54:2f:57:4b:43:55:42:2f:4a:4a:2d  ML_OUT/WKCUB/JJ-
00000030  44:30:36:2f:31:36:30:2f:43:68:61:70:74:65:72:20  D06/160/Chapter 
00000040  30:32:2e:78:6d:6c                                02.xml

<- NET_SSH2_MSG_IGNORE (since last: 0.0001, network: 0.0001s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_IGNORE (since last: 0, network: 0s)
00000000  00:00:00:00                                      ....

<- NET_SSH2_MSG_KEXINIT (since last: 0, network: 0s)
00000000  88:11:84:bb:4c:32:3b:8e:ba:79:56:e0:b7:c3:91:ef  ....L2;..yV.....

@terrafrost
Copy link
Member

I'm not seeing a whole lot in those log that I can do anything with.

A few things I'm wondering:

  • what does $ssh->getServerIdentification() return?
  • how big is the file that you're uploading?
  • does this behavior manifest itself when you're doing commands in the shell through an SSH client?
  • what happens if you try this with PuTTY? PuTTY is important because PuTTY, uniquely, gives SSH logs.

You can enable logging in PuTTY by going to putty.exe, selecting the Logging category and checking "SSH packets". Then go back to the Session category, type in a session name (say phpseclib) under "Saved Sessions" and hit the Save button.

Once that's done, go to a command prompt and type in the following: pscp -load phpseclib filename.ext username@domain.tld:filename.ext. You should then have a new file - putty.log. If you could provide me with that that'd be great.

That said, here is the result of my analysis of your logs:

  • -> SSH_FXP_STAT on /XML_LINK/XML/HCCP/SP-D17/147/Session 01.json
  • <- SSH_FXP_STATUS - No such file
  • -> SSH_FXP_STAT on /XML_LINK/XML/HCCP/SP-D17/147
  • <- SSH_FXP_ATTRS
  • -> SSH_FXP_OPEN on /XML_LINK/XML/HCCP/SP-D17/147/Session 01.json
  • <- SSH_FXP_HANDLE
  • -> SSH_FXP_WRITE
  • <- SSH_FXP_STATUS
  • -> SSH_FXP_CLOSE
  • <- SSH_FXP_STATUS
  • -> SSH_FXP_STAT on /XML_LINK/XML_OUT/WKCUB/JJ-D06/160/Chapter 02.xml

That's when the server starts sending a bunch of NET_SSH2_MSG_IGNORE packets and then the server tries to initiate a key re-exchange.

Normally, the logs would have the SSH identifier in them but either you manually cut it out or else the logs were so big that that part of them was removed to clear up space for newer packets.

@rubao
Copy link
Contributor

rubao commented May 12, 2021

I have the same issue, login() using \SSH2 works fine, login() using \SFTP, both with a PublicKeyLoader::load() RSA key.
SSH2 works fine.
SFTP doesnt work, and fail with Expected SSH_MSG_KEXINIT.

Bug present in version 3.0.8
Bug not present in version 2.0.31

image

@terrafrost
Copy link
Member

@rubao
Copy link
Contributor

rubao commented May 14, 2021

Unfortunately not, a different error appears.

image

@terrafrost
Copy link
Member

Are you using the branch or did you manually apply the changes to 3.0.8? I ask because the line numbers aren't lining up with the branch. Like line 1616 doesn't throw an exception:

https://github.com/terrafrost/phpseclib/blob/992a6f2e006b7a17d7d7f2213dbc3f670cdbae71/phpseclib/Net/SSH2.php#L1612-L1618

Also, what can often be more helpful be more are the SSH logs, which you can get by doing define('NET_SSH2_LOGGING', 2) and then echo $ssh->getLog() after you encounter the error (in the catch portion of a try block).

The problem with stack traces is that they don't tell me too much about what packets were sent before or after. I mean, they're good to have, but it's also good to have the SSH logs as well.

Thanks!

@terrafrost
Copy link
Member

Also, what does $ssh->getServerIdentification() say? Normally the logs would return that but if you're transferring enough data to trigger a key re-exchange (I assume you are transferring a lot of data?) then that part will prob not be included in the logs.

That's relevant because some SSH servers can have bugs. eg. https://the.earth.li/~sgtatham/putty/0.75/htmldoc/Chapter4.html#S4.26.2 I suspect that bug isn't relevant in your case but there could still be other bugs.

@terrafrost
Copy link
Member

I made another commit that might help:

terrafrost@ff728af

Same branch.

@rubao
Copy link
Contributor

rubao commented May 16, 2021

sorry I manually apply the changes to 3.0.8.

now using terrafrost/phpseclib:dev-3.0-kex-fix
- Upgrading phpseclib/phpseclib (3.0.8 => dev-3.0-kex-fix ff728af)

works perfectly! thank you! 👍

@rubao
Copy link
Contributor

rubao commented May 16, 2021

Using version 3.0.8 I also cannot getSeverIdentification()

RuntimeException thrown with message "Invalid size"

Stacktrace:
#5 RuntimeException in /[...]/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:3424
#4 phpseclib3\Net\SSH2:read_remaining_bytes in /[...]/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:3313
#3 phpseclib3\Net\SSH2:get_binary_packet in /[...]/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:1471
#2 phpseclib3\Net\SSH2:key_exchange in /[...]/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:1347
#1 phpseclib3\Net\SSH2:connect in /[...]/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:4356
#0 phpseclib3\Net\SSH2:getServerIdentification in /[...]/index.php:71

Connecting with another lib I got this:
emote protocol version 2.0, remote software version SSHp1-hpn14v2

@terrafrost
Copy link
Member

I really really wish you would provide the SSH2 logs. I asked for them before and was able to figure things out with them but it would have made it easier if you had provided them.

As a reminder you can get them by doing define('NET_SSH2_LOGGING', 2) and then echo $ssh->getLog().

Anyway, I'm not able to reproduce that issue:

$ssh = new SSH2('127.0.0.1', 22);
echo $ssh->getServerIdentification();

That works fine for me. So does this:

$ssh = new SFTP('127.0.0.1', 22);
$ssh->login('username', 'password');
echo $ssh->getServerIdentification();

That worked fine for me too.

The fact that SSH2.php:1347 is called makes me think that you're calling $ssh->getServerIdentification() before you've logged (because connect() returns false waaaay before that line if $this->bitmap & self::MASK_CONSTRUCTOR) in BUT... the fact that SSH2.php:3313 is called makes it seem like the key negotiation has already taken place (eg. you're either already logged in or you're in the middle of a multi factor authentication round; I say this because $ssh->decrypt is bool(false) until after key exchange has taken place).

The SSH2 logs would help me put the stack trace into context.

Thanks!

@rubao
Copy link
Contributor

rubao commented May 19, 2021

Hi @terrafrost, I sent the logs per e-mail and here what i did:

version 3.0.8

define('NET_SSH2_LOGGING', 2);
$sftp = new \phpseclib3\Net\SFTP ('****', 22);
$crypt = PublicKeyLoader::load('keyfile');
$sftp->login('username', $crypt);

fail with Expected SSH_MSG_KEXINIT

Second try:

define('NET_SSH2_LOGGING', 2);
$sftp = new \phpseclib3\Net\SFTP ('****', 22);
$crypt = PublicKeyLoader::load('keyfile');
try {
   $sftp->login('username', $crypt);
} catch(\Exception $e) {
    echo $sftp->getServerIdentification();
}

fail with RuntimeException invalid_size

RuntimeException: Invalid size in file /[...]/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php on line 3424
Stack trace:
  1. RuntimeException-&gt;() /[...]/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:3424
  2. phpseclib3\Net\SSH2-&gt;read_remaining_bytes() /[...]/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:3313
  3. phpseclib3\Net\SSH2-&gt;get_binary_packet() /[...]/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:1471
  4. phpseclib3\Net\SSH2-&gt;key_exchange() /[...]/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:1347
  5. phpseclib3\Net\SSH2-&gt;connect() /[...]/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:4356
  6. phpseclib3\Net\SSH2-&gt;getServerIdentification() 

@terrafrost
Copy link
Member

I replied to your email.

Thanks!

@terrafrost
Copy link
Member

Closing due to inactivity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants