2012-05-17 9 views
9

私は/bin/shを提供していないサーバー上のssh経由でファイルにアクセスするためのEmacs TRAMPを使用しようとしています、と私は接続しようとするので、私は次のエラーを取得する:/bin/shを提供していないsshサーバでEmacs TRAMPを使用していますか?

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

はTRAMPに指示する方法はありますリモートシェルはそのサーバーのどこにありますか? (「サーバ」そう/system/bin/shででSH、つながれたAndroidの携帯電話です。)

答えて

6

tramp-methods変数のdocstringを参照してください。この部分は注目に値すると思われる:

  • tramp-remote-shell
    これは、リモートホスト上で使用するシェルを指定します。この は、Bourneのようなシェルでなければなりません。これは、「/ binに/ SH」以外の値に セットこれに通常は必要ありません:トランプは、チルダ展開をgroksシェルを使用 に望んでいるが、それはそれのため を検索することができます。また、これはあなたが使用することを決定した値に対して真ではないかもしれません 、「/ binに/ shのは、」すべてのUnixen上に存在することに注意してください。 あなたは警告されました。

編集:

だからここにあなたが既存のもの(この例では「SCPC」)に基づいた新しい方法を作成し、カスタムメソッドに別のリモートシェルを与えることができる方法です:Emacsの23(トランプ2.1.20)で、このプロパティはtramp-remote-sh命名されたことを

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

は注意してください。 Emacs 24(Tramp 2.2.3-24.1)ではtramp-remote-shellに変更されました。

そして、私はあなたがこれであなたの指定されたホストにデフォルトでこの方法を使用することができることを推測している:

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

これは、特定の方法(例:ssh)を介してすべてのアクセスに対してシェルを設定するようです。このper-hostを設定する方法はありますか? –

+1

あなたはおそらく必要TRAMP-リモートシェルを使用していますが、あなたがそれを基づかている方法と他の点では同じで、その後、問題のホストにアクセスするためのものを使用する新しい方法を追加したいです。 – phils

+0

ホストをメソッドにマッピングするための 'tramp-default-method-alist'変数も参照してください。 – phils

-1

SSHは、リモートユーザのログインシェルを使用することを期待しています。

::何とか:何とか:USER_NAME:何とか:/パス/に/シェル

それともシンボリックリンク/ binに/ SHには、サーバーへのrootアクセス権を持っている場合は、passwdファイルのエントリを変更することができますそれ。

私はクライアントの側からこれを変更する方法はないと思いますが、もしあれば、TRAMPではなくsshと言う必要があります。 (あなたは、ssh_configファイルを経由してこれを行うことができます。)

編集:私は修正立つ を。

+0

これは正しくありません。 @philsは正しく説明しました。 trampは 'tramp-remote-shell'で指定されたシェルを使います。また、sshを実行しているプログラムが、sshのコマンドラインでリモートホスト上で実行するプログラムをsshに伝えることができるので、このような目的でssh_configを使用する必要があると言うのも間違いです。 –

関連する問題