2016-02-03 15 views
6

Tôi có dự án Laravel 4.2 được lưu trữ trên một máy chủ (Máy chủ A) và tôi cần có khả năng tải tệp lên từ ứng dụng này và các tệp được chuyển sang máy chủ Windows có trên máy chủ cùng một mạng cục bộ (Máy chủ B).Laravel SSH trên Windows Server

Tôi đã cài đặt OpenSSH trên máy chủ Windows và đã bắt đầu dịch vụ. Tôi có thể xác nhận rằng điều này đang hoạt động vì tôi có thể kết nối thành công trong thiết bị đầu cuối trên Máy chủ A.

Trong dự án Laravel, tôi đã tạo kết nối trong tệp app/config/remote.php.

Nhưng khi tôi cố gắng chạy một lệnh trong dự án Laravel trên Server Một bằng cách sử dụng đoạn mã sau:

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

tôi nhận được lỗi sau:

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

Tôi nhận được lỗi này cho mỗi lệnh tôi cố gắng chạy trên Máy chủ B. Kỳ lạ thay, nếu tôi cố gắng sử dụng cùng một mã nhưng chỉ nó vào một máy chủ Linux, mã hoạt động tốt. Điều này sẽ khiến tôi tin rằng máy chủ SSH có thể được thiết lập không chính xác trên Máy chủ B, nhưng thực tế là tôi có thể kết nối qua SSH tới Máy chủ B từ Máy chủ A trong cửa sổ đầu cuối gây nhầm lẫn cho toàn bộ vấn đề!

Có ai biết ý nghĩa của lỗi tôi đang nhận không?

+0

Phiên bản PHP dự án Laravel 4.2 của bạn được lưu trữ trên phiên bản PHP nào? – revo

+1

Tôi không biết Laravel rất tốt, nhưng tôi đã tìm thấy một báo cáo vấn đề tương tự trên phpeclib, đã được sửa vào năm ngoái: https://github.com/terrafrost/phpseclib/commit/684d6eed0e2fc3045c9169685ce135a14474abef – andrucz

+0

đăng nhật ký của bạn 'echo $ ssh-> getLog(); 'cũng kiểm tra máy chủ và tường lửa của bạn – Ghayel

Trả lời

2

SSH của Laravel 4.2 là Mặt tiền sẽ giải quyết thành Illuminate\Remote\RemoteManager. Phương thức into() của nó sẽ trả về trường hợp Illuminate\Remote\Connection sau đó sử dụng ví dụ SecLibGateway đóng gói thư viện phpseclib. SecLibGateway sẽ trả về phiên bản System_SSH_Agent của phpseclib (xem SSH_Agent.php trong thư mục vendor/phpseclib/phpseclib/phpseclib/System trong cài đặt Laravel 4.2). Bên trong hàm tạo của System_SSH_Agent, tại dòng 248:

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

Nó mở kết nối ổ cắm tới unix: //. OP cho biết SSH hoạt động trong máy chủ Linux nhưng không hoạt động trong máy chủ Windows. Tôi tin rằng đây có thể là thủ phạm. Có rất ít các cuộc gọi đến unpack() chức năng của PHP như tại dòng 274:

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

Nó kêu gọi giải nén() với loại N với 4 số đầu vào cần thiết. Bằng cách nào đó fsock không hợp lệ và điều đó gây ra thông báo lỗi xảy ra.

1

Có vẻ như loại lỗi xuất hiện khi "cảnh báo xuất hiện khi dữ liệu đầu vào là không đúng" cfr this post

này có thể là do một thiết lập trong php.ini, tức là "magic_quotes_runtime hoạt động bằng cách thêm dấu xồ nguợc trong nội dung đọc từ các nguồn bên ngoài, như các tệp văn bản, phá hủy đầu vào nhị phân một cách hiệu quả như một tệp .mo và cũng phá hủy cài đặt cấu hình đọc từ cơ sở dữ liệu ... "cfr this post

5

Đây có thể là sự cố với phpseclib. Kiểm tra xem bạn đã cài đặt phiên bản mới nhất chưa, cập nhật nếu có thể.

Các vấn đề liên quan