2012-04-30 21 views
8

Mã trong câu hỏiLỗi "không tuyệt đối nhà" qua Net: SSH

Net::SSH.start('server name', 'user') 

này trả về "nhà không tuyệt đối". 'Người dùng' trên thực tế không có thư mục chính. Một cách tiếp cận được đề xuất là sửa đổi ~/.ssh/config bằng đường dẫn đầy đủ đến IdentityFile. Điều này không giải quyết được vấn đề.

Phần điên rồ của điều này là mã hoạt động tốt nếu được gọi qua irb hoặc bảng điều khiển. Khoảnh khắc chúng ta thử gọi nó từ bên trong một phương thức lớp (với cùng mã) nó trả về lỗi "không tuyệt đối về nhà".

'Người dùng' cũng có thể ssh vào máy chủ qua dòng lệnh mà không gặp sự cố. Máy chủ đang chạy Ubuntu.

CẬP NHẬT

Nhờ @Phrogz - Việc sửa chữa này được thiết lập ENV [ 'HOME'] để '/ home/triển khai'. Tuy nhiên, tôi đã không tìm ra lý do tại sao $ HOME được đặt thành "." trên máy chủ. Vì vậy, tôi sẽ để lại câu hỏi này mà không có một "Trả lời" cho đến khi tôi, hoặc một người nào khác, con số đó ra. Việc đặt HOME theo cách thủ công cảm thấy giống như "hack" hơn là một giải pháp thích hợp, nhưng nó hoạt động.

+1

Bạn có bộ biến môi trường 'HOME' không? 'echo $ HOME' – Phrogz

+1

@Phrogz - nếu tôi xuất nó qua irb, console, dòng lệnh nó sẽ hiển thị một đường dẫn. Tuy nhiên, nếu tôi đặt nó là một biến trong lớp (home =% x [echo $ HOME]) chính nó (Rails_Root/lib/class_obj) thì nó sẽ trả về cho tôi một dấu "."? – Jadon

+1

Có vẻ như thông dịch viên của bạn đang chạy dưới một trình bao có đường dẫn khác.Nếu bạn đặt nó thành một đường dẫn tuyệt đối trong tập lệnh của bạn, hoặc không đặt nó hoàn toàn, điều đó có khắc phục được nó không? – Phrogz

Trả lời

0

Linux đặt thông tin này dựa trên tệp /etc/passwd.

Kiểm tra những gì tồn tại trong /etc/passwd cho người dùng deployer. Nó phải ở gần cuối danh sách.

Các mục được phân cách bằng dấu hai chấm. Giá trị cho ENV['HOME'] phải là giá trị thứ hai cho mục nhập cuối cùng trong dòng đó.

Để trống, nghĩa là có hai dấu hai chấm cùng nhau?

Tôi nghi ngờ biến HOME của bạn không có trong số /etc/passwd và đang được đặt trong một trong các dấu chấm mặc định, tức là một cái gì đó như .bashrc. Sau đó, .bashrc bị đoản mạch nếu ứng dụng của bạn đang chạy qua tập lệnh init.d không mã nguồn các dấu chấm của bạn. (Nhiều tệp .bashrc ngừng tải phần còn lại của các lệnh nếu nó được thực hiện thông qua trình bao không tương tác).

Hy vọng điều này sẽ giúp và vui lòng đăng lại với những phát hiện của bạn.

+0

Tôi đang gặp sự cố tương tự, với nhà được đặt đúng trong/etc/passwd. – trimbletodd

1

Nó chắc chắn hoạt động bằng cách đặt HOME env var nếu nó không được đặt.

2

Chúng tôi chỉ gặp vấn đề tương tự và tìm ra nguyên nhân gốc rễ. Chúng tôi đang chạy kịch bản của chúng tôi như một dịch vụ, và nếu bạn kiểm tra manpage cho dịch vụ, nó sẽ loại bỏ hầu hết các biến env trước khi chạy kịch bản, bao gồm HOME. Tôi không biết nếu kịch bản của bạn là như nhau, nhưng HOME không được thiết lập.

net-ssh muốn tra cứu cấu hình ssh từ thư mục nhà của người dùng, vì vậy nó được sử dụng để buộc ENV ['HOME'] thành "." nếu nó không được thiết lập. Nhưng khi File.expand_path cố mở rộng "~/.ssh" thì ArgumentError được nâng lên.

Điều này đã được khắc phục hai tháng trước (https://github.com/net-ssh/net-ssh/pull/98), vì vậy việc cập nhật đá quý net-ssh của bạn sẽ giải quyết vấn đề này.

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