2016-02-03 21 views
6

Ho un progetto Laravel 4.2 ospitato su un server (Server A) e devo essere in grado di caricare i file da questa applicazione ei file devono essere trasferiti su un server Windows che si trova sul stessa rete locale (Server B).Laravel SSH su Windows Server

Ho installato OpenSSH sul server Windows e ho avviato il servizio. Posso confermare che questo funziona perché posso connettermi correttamente in un terminale sul server A.

Nel progetto Laravel ho creato la connessione nel file app/config/remote.php.

Ma quando si tenta di eseguire un comando nel progetto laravel sul server Un utilizzando il seguente codice:

SSH::into('ServerB')->run(['IF EXIST folder (echo YES) ELSE (echo NO)'], function($line){ 
    echo $line.PHP_EOL; 
}); 

ottengo il seguente errore:

unpack(): Type N: not enough input, need 4, have 1 

Sono ricevendo questo errore per ogni comando provo ad eseguire sul server B. Stranamente, se provo a usare lo stesso codice ma lo indirizza a un server Linux, il codice funziona correttamente. Ciò mi indurrebbe a credere che il server SSH è probabilmente impostato in modo errato sul server B, ma il fatto che riesca a connettermi tramite SSH al server B dal server A in una finestra di terminale confonde l'intera questione!

Qualcuno conosce il significato dell'errore che sto ricevendo?

+0

Su quale versione di PHP è ospitato il progetto Laravel 4.2? – revo

+1

Non conosco molto bene Laravel, ma ho trovato un problema simile su phpeclib, che è stato risolto l'anno scorso: https://github.com/terrafrost/phpseclib/commit/684d6eed0e2fc3045c9169685ce135a14474abef – andrucz

+0

pubblica il tuo log 'echo $ ssh-> getLog(); 'controlla anche l'host e il firewall – Ghayel

risposta

2

L'SSH di Laravel 4.2 è Facade che verrà risolto in Illuminate\Remote\RemoteManager. Il suo metodo into() restituirà l'istanza Illuminate\Remote\Connection che quindi utilizzerà l'istanza SecLibGateway che incapsula la libreria phpseclib. SecLibGateway restituirà l'istanza di phpeplib System_SSH_Agent (vedere SSH_Agent.php nella directory vendor/phpseclib/phpseclib/phpseclib/System nell'installazione di Laravel 4.2). All'interno del costruttore di System_SSH_Agent, alla riga 248:

$this->fsock = fsockopen('unix://' . $address, 0, $errno, $errstr); 

Si apre connessione socket a Unix: //. OP ha detto che SSH funziona nel server Linux ma non nel server Windows. Credo che questo possa essere il colpevole. Ci sono poche chiamate alla funzione di PHP unpack() come alla riga 274:

$length = current(unpack('N', fread($this->fsock, 4))); 

chiama unpack() di tipo N con 4 numero di ingresso richiesto. In qualche modo, fsock non è valido e ciò causa il verificarsi di un messaggio di errore.

1

sembra che questo tipo di errori viene visualizzato quando "appare l'avviso quando i dati di input non è corretto" cfr this post

Questo potrebbe essere dovuto ad un ambiente in php.ini, vale a dire "magic_quotes_runtime funziona con l'aggiunta di backslash nel contenuto leggi da fonti esterne, come i file di testo, distruggendo efficacemente l'input binario come un file .mo e anche distruggendo le impostazioni di configurazione lette dal database ... "cfr this post

5

Questo potrebbe essere un problema con phpseclib. Controlla se hai installato l'ultima versione, aggiorna se possibile.