2012-05-17 10 views
9

Staram się używać Emacs Tramp, aby uzyskać dostęp do plików przez ssh na serwerze, który nie przewiduje /bin/sh, a więc pojawia się następujący komunikat o błędzie podczas próby połączenia:Używanie Emacsa TRAMP z serwerem ssh, który nie udostępnia/bin/sh?

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

Czy istnieje jakiś sposób, aby powiedzieć Tramp gdzie zdalna powłoka jest dla tego serwera? ("Serwer" to powiązany telefon z Androidem, więc należy go przesłać pod numer /system/bin/sh.)

Odpowiedz

6

Zobacz także docstring dla zmiennej tramp-methods. Ta część wydaje się godne uwagi:

  • tramp-remote-shell
    to określa powłokę do używania na zdalnym komputerze. Ten MUSI być powłoką Bourne'a. Zazwyczaj nie jest konieczne, aby ustawić tę wartość na wartość inną niż "/ bin/sh": Tramp chce uzyskać użyć powłoki, która rozszerza tyldę, ale może wyszukać dla niej wartość . Zauważ też, że "/ bin/sh" istnieje na wszystkich Uniksach, to może nie być prawdziwe dla wartości, którą zdecydujesz się użyć. Zostałeś ostrzeżony.

Edit:

Więc oto sposób można utworzyć nową metodę opartą na istniejącym jednego („SCPC” w tym przykładzie), a następnie nadać niestandardową metodę inną zdalną powłokę :

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

pamiętać, że Emacs 23 (Tramp 2.1.20), ta właściwość została nazwana tramp-remote-sh. W Emacs 24 (Tramp 2.2.3-24.1) został zmieniony na tramp-remote-shell.

I zgaduję, że można użyć tej metody domyślnie do określonego hosta z tym:

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

Wygląda na to, że ustawia powłokę dla wszystkich uprawnień za pośrednictwem danej metody (np. Ssh). Czy istnieje sposób na ustawienie tego na hosta? –

+1

Prawdopodobnie chcesz dodać nową metodę, która używa niezbędnej powłoki-tramp-remote, ale poza tym jest identyczna z metodą, na której ją bazujesz, a następnie użyć jej do uzyskania dostępu do hosta, o którym mowa. – phils

+0

Zobacz także zmienną 'tramp-default-method-alist' do mapowania hostów na metody. – phils

-1

ssh oczekuje użycia powłoki logowania użytkownika zdalnego. Jeśli masz dostęp do katalogu głównego serwera, można zmienić wpis w pliku passwd:

: bla: bla: nazwa_użytkownika: bla:/ścieżka/do/Shell

Albo po prostu dowiązanie/bin/sh do to.

Nie wierzę, że jest jakikolwiek sposób na zmianę tego ze strony klienta, ale jeśli tak, trzeba powiedzieć ssh, a nie TRAMP. (Możesz to zrobić poprzez plik ssh_config.)

Edytuj: Poprawiam się.

+0

To jest błędne. @phils wyjaśnił to poprawnie; tramp używa powłoki określonej przez 'tramp-remote-shell'. Błędne jest także mówienie, że musisz użyć ssh_config do czegoś podobnego, ponieważ program wykonujący ssh może powiedzieć ssh, który program ma zostać uruchomiony na zdalnym hoście w wierszu poleceń ssh. –

Powiązane problemy