2012-05-17 13 views
9

Sto cercando di usare Emacs TRAMP per accedere ai file su SSH su un server che non fornisce /bin/sh, e così ottengo l'errore seguente quando provo a connettermi:Utilizzando Emacs VAGABONDO con un server ssh che non fornisce/bin/sh?

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

C'è un modo per dire TRAMP dove la shell remota è per quel server? (Il "server" è un telefono Android collegato, in modo da /system/bin/sh.)

risposta

6

Vedi anche la docstring per la variabile tramp-methods. Questa parte sembrerebbe notare:

  • tramp-remote-shell
    questa specifica la shell utilizzare sull'host remoto. Questo DEVE essere una shell di tipo Bourne. Normalmente non è necessario impostare questo a qualsiasi valore diverso da "/ bin/sh": Tramp vuole utilizzare una shell che groks espansione della tilde, ma può cercare per esso. Si noti inoltre che "/ bin/sh" esiste su tutti Unixen, questo potrebbe non essere vero per il valore che si decide di utilizzare. Sei stato avvisato.

Edit:

Quindi, ecco un modo si potrebbe creare un nuovo metodo basato su un uno ("SCPC" in questo esempio) esistente e quindi dare il metodo personalizzato un diverso shell remota :

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

si noti che in Emacs 23 (Tramp 2.1.20), questa struttura è stato chiamato tramp-remote-sh. In Emacs 24 (Tramp 2.2.3-24.1) è stato modificato in tramp-remote-shell.

E sto indovinando che è possibile utilizzare questo metodo per impostazione predefinita per il tuo host specificato con questo:

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

Sembra che imposta la shell per tutti gli accessi tramite un determinato metodo (ad es. Ssh). C'è un modo per impostare questo per-host? –

+1

Probabilmente si desidera aggiungere un nuovo metodo che utilizza il vagabondo-remote-shell necessaria, ma è identico al metodo si sta basando su, e quindi utilizzare che per l'accesso l'ospite in questione. – phils

+0

Vedere anche la variabile 'tramp-default-method-alist', per mappare gli host ai metodi. – phils

-1

ssh prevede di utilizzare la shell di accesso dell'utente remoto. Se si ha accesso root al server, è possibile modificare la voce nel file passwd:

: blah: blah: nome_utente: blah:/path/to/guscio

O solo link simbolico/bin/sh a esso.

Non credo ci sia un modo per cambiare questo da parte del cliente, ma se c'è, si avrebbe bisogno di dire ssh, non TRAMP. (È possibile farlo tramite un file ssh_config.)

Modifica: Sono corretto.

+0

Questo non è corretto. @phils lo ha spiegato correttamente; tramp usa la shell specificata da 'tramp-remote-shell'. E 'anche corretto dire che si deve utilizzare ssh_config per una cosa del genere come il programma in esecuzione di ssh può dire ssh quale programma da eseguire sulla macchina remota sulla riga di comando di ssh. –