2012-05-17 9 views
9

Estoy tratando de usar Emacs TRAMP para acceder a archivos a través de SSH en un servidor que no proporciona /bin/sh, y así me sale el error siguiente cuando intento conectar: ​​Usando Emacs TRAMP con un servidor ssh que no proporciona/bin/sh?

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

¿Hay alguna manera de saber TRAMP donde el shell remoto es para ese servidor? (El "servidor" es un teléfono Android conectado, así que entréguelo al /system/bin/sh.)

Respuesta

6

Consulte también el docstring para la variable tramp-methods. Esta parte parecería digno de mención:

  • tramp-remote-shell
    Esto especifica el shell para utilizar en el host remoto. Este DEBE ser un shell tipo Bourne. Normalmente no es necesario establecer esto a cualquier valor que no sea "/ bin/sh": vagabundo quiere utilizar un shell que groks expansión de tilde, pero puede buscar para ello. También tenga en cuenta que "/ bin/sh" existe en todos los Unixen, esto puede no ser cierto para el valor que decida usar. Usted ha sido advertido.

Editar:

Así que aquí está una manera que usted puede crear un nuevo método basado en uno ("scpc" en este ejemplo) existente y, a continuación, dar el método personalizado un shell remoto diferente :

(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))) 

Tenga en cuenta que en Emacs 23 (vagabundo 2.1.20), esta propiedad fue nombrado tramp-remote-sh. En Emacs 24 (Tramp 2.2.3-24.1) se ha cambiado a tramp-remote-shell.

y supongo que se puede utilizar este método por defecto para el host especificado con esto:

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

Parece que establece el shell para todos los accesos a través de un método determinado (por ejemplo, ssh). ¿Hay alguna forma de configurar esto por host? –

+1

Probablemente desee agregar un nuevo método que use el shell-shell de vagabundo necesario, pero que de otro modo sea idéntico al método en el que lo está basando, y luego usarlo para acceder al host en cuestión. – phils

+0

Vea también la variable 'tramp-default-method-alist', para asignar hosts a los métodos. – phils

-1

ssh espera utilizar el shell de inicio de sesión del usuario remoto. Si tiene acceso root en el servidor, puede cambiar la entrada en el archivo passwd:

: bla: bla: nombre_usuario: bla:/ruta/a/corteza

O simplemente enlace simbólico/bin/sh para eso.

No creo que haya ninguna forma de cambiar esto por parte del cliente, pero si lo hay, deberá indicar ssh, no TRAMP. (Puede hacerlo a través de un archivo ssh_config.)

Edit: Me erraron corregido.

+0

Esto es incorrecto. @phils lo ha explicado correctamente; vagabundo utiliza el shell especificado por 'tramp-remote-shell'. También es incorrecto decir que debe usar ssh_config para algo como esto, ya que el programa que ejecuta ssh puede decirle a ssh qué programa ejecutar en el host remoto en la línea de comando de ssh. –

Cuestiones relacionadas