2012-05-17 29 views
9

Tôi cố gắng để sử dụng Emacs TRAMP để truy cập dữ liệu thông qua ssh trên máy chủ mà không cung cấp /bin/sh, và vì vậy tôi nhận được lỗi sau khi tôi cố gắng kết nối:Sử dụng Emacs TRAMP với máy chủ ssh không cung cấp/bin/sh?

env: can't execute '/bin/sh': No such file or directory 

Có cách nào để nói với TRAMP nơi mà vỏ từ xa cho máy chủ đó? ("Máy chủ" là điện thoại Android được chia sẻ kết nối, vì vậy hãy đăng nhập tại /system/bin/sh.)

Trả lời

6

Xem thêm docstring cho biến số tramp-methods. Phần này sẽ xuất hiện đáng chú ý:

  • tramp-remote-shell
    này quy định các vỏ để sử dụng trên các máy chủ từ xa. Điều này PHẢI là một vỏ giống như Bourne. Thông thường, không cần thiết phải đặt giá trị này thành bất kỳ giá trị nào khác "/ bin/sh": Tramp muốn sử dụng trình bao mở rộng dấu ngã, nhưng có thể tìm kiếm cho nó. Cũng lưu ý rằng "/ bin/sh" tồn tại trên tất cả Unixen, điều này có thể không đúng đối với giá trị mà bạn quyết định sử dụng. Bạn đã được cảnh báo.

Edit:

Vì vậy, đây là một cách bạn có thể tạo ra một phương pháp mới dựa trên hiện có ("SCPC" trong ví dụ này), và sau đó cung cấp cho các phương pháp tùy chỉnh một remote shell khác nhau :

(require 'tramp) 
(let* ((base-method (cdr (assoc "scpc" tramp-methods))) 
     (new-method (copy-tree base-method)) 
     (rshell (assq 'tramp-remote-shell new-method))) 
    (setcdr rshell "/system/bin/sh") 
    (add-to-list 'tramp-methods (cons "android" new-method))) 

Lưu ý rằng trong Emacs 23 (Tramp 2.1.20), thuộc tính này được đặt tên tramp-remote-sh. Trong Emacs 24 (Tramp 2.2.3-24.1) nó đã được đổi thành tramp-remote-shell.

Và tôi đoán rằng bạn có thể sử dụng phương pháp này theo mặc định cho máy chủ định của bạn với điều này:

(add-to-list 
'tramp-default-method-alist 
(list "\\`myhost\\'" nil "android")) 
+0

Dường như thiết lập trình bao cho tất cả quyền truy cập thông qua một phương thức cụ thể (ví dụ: ssh). Có cách nào để thiết lập này cho mỗi máy chủ? –

+1

Bạn có thể muốn thêm một phương pháp mới sử dụng tramp-remote-shell cần thiết nhưng nếu không giống với phương pháp bạn đang dựa trên nó, và sau đó sử dụng phương pháp đó để truy cập máy chủ được đề cập. – phils

+0

Xem thêm biến 'tramp-default-method-alist', để ánh xạ các host thành các phương thức. – phils

-1

ssh hy vọng sẽ sử dụng trình bao đăng nhập của người dùng từ xa. Nếu bạn có quyền truy cập gốc đến máy chủ, bạn có thể thay đổi các mục trong file passwd:

: blah: blah: user_name: blah:/path/to/vỏ

Hoặc chỉ cần liên kết tượng trưng/bin/sh để nó.

Tôi không tin rằng có bất kỳ cách nào để thay đổi điều này từ phía khách hàng, nhưng nếu có, bạn sẽ cần phải thông báo cho ssh, chứ không phải TRAMP. (Bạn có thể thực hiện việc này thông qua tệp ssh_config.)

Chỉnh sửa: Tôi đã sửa.

+0

này là không chính xác. @phils đã giải thích nó một cách chính xác; tramp sử dụng shell được chỉ định bởi 'tramp-remote-shell'. Nó cũng không chính xác để nói rằng bạn phải sử dụng ssh_config cho bất cứ điều gì như thế này như chương trình thực thi ssh có thể nói ssh mà chương trình để thực hiện trên máy chủ từ xa trên dòng lệnh của ssh. –

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