2016-02-03 15 views
6

Bir sunucuda (Server A) barındırılan bir Laravel 4.2 projem var ve bu uygulamadan dosyaları karşıya yükleyebilmem gerekiyor ve dosyalar üzerinde bulunan bir Windows sunucusuna aktarılmalı. aynı yerel ağ (Sunucu B).Windows Server'da Laravel SSH

OpenSSH'yi Windows sunucusuna yükledim ve hizmeti başlattım. Bunun çalıştığını onaylayabilirim çünkü Sunucu A numaralı telefondan bir terminalde başarıyla bağlanabiliyorum.

Laravel projesinde, uygulama/config/remote.php dosyasındaki bağlantıyı oluşturdum.

Ama Aşağıdaki kodu kullanarak Sunucusu bir tarihinde laravel projesinde bir komut çalıştırmayı denediğinizde: Ben

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

: aşağıdaki hatayı alıyorum

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

Her komut için bu hatayı alıyorum Sunucuda Çalıştırmak B. Tuhaf bir şekilde, aynı kodu kullanmaya çalışırsam ancak bir Linux sunucusuna işaret edersem kod çalışır. Bu, SSH sunucusunun büyük olasılıkla Sunucu B üzerinde yanlış ayarlandığına inanmamı sağlar, ancak bir terminal penceresindeki Sunucu A'dan SSH'ye bağlanabilme gerçeği, tüm konuyu karıştırır!

Aldığım hatanın ne anlama geldiğini bilen var mı?

+0

Laravel 4.2 projeniz hangi PHP sürümünde barındırılıyor? – revo

+1

Laravel'i çok iyi tanımıyorum ama phpeclib ile ilgili olarak geçen sene düzeltilen benzer bir sorun raporu buldum: https://github.com/terrafrost/phpseclib/commit/684d6eed0e2fc3045c9169685ce135a14474abef – andrucz

+0

log 'echo $ gönder ssh-> getLog(); 'ev sahibi ve güvenlik duvarınızı da kontrol edin – Ghayel

cevap

2

Laravel 4.2's SSH, Illuminate\Remote\RemoteManager numaralı ürüne çözüm verecek. Onun into() yöntemi, phpseclib kitaplığını kapsülleyen SecLibGateway örneğini kullanan Illuminate\Remote\Connection örneğini döndürecektir. SecLibGateway, phpseclib'in System_SSH_Agent örneğini döndürür (bkz. Laravel 4.2 yüklemesinde vendor/phpseclib/phpseclib/phpseclib/System dizinindeki SSH_Agent.php). hat 248 at System_SSH_Agent en yapıcı, İç:

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

O unix için soket bağlantısı açar: //. OP, SSH'nin Linux sunucusunda çalıştığını ancak Windows sunucusunda çalışmadığını söyledi. Bunun suçlu olabileceğine inanıyorum.

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

Bu paket açma çağrıları() 4 numarası gerekli girişli tipi N: Böyle hattı 274 itibariyle PHP'nin unpack() işlevine birkaç çağrılar vardır. Bir şekilde fsock geçerli değil ve bu hata mesajı oluşmasına neden oldu.

1

Bu hataların bu tür cfr this post

Bunun sebebi, php.ini içinde bir ayara "girdi veri doğru olmadığında uyarı görünür" görünen görünüyor, yani "magic_quotes_runtime içeriğindeki tersbölüleri eklenerek çalışır text dosyaları gibi harici kaynaklardan okuyarak, .mo-file gibi ikili girişleri etkin bir şekilde yok etmek ve ayrıca veritabanından okunan konfigürasyon ayarlarını yok etmek ... "cfr this post

5

Bu muhtemelen phpseclib ile ilgili bir sorun olabilir. En son sürümün yüklü olup olmadığını kontrol edin, mümkünse güncelleştirin.