120

リモートサーバー上にあるEmacs内で、サーバー上でsudo電源を使用してファイルを開きたい。次のように、Trampを介してsudoでローカルファイルを開くことができます。

C-x C-f /sudo::/home/user/file

しかし、サーバーでsudoを使用したい:

C-x C-f /sudo::user@server/home/user/file

しかし、これにより、ローカルマシンでsudoパワーが得られ、ローカルマシンでsudoパスワードが要求されます。サーバーでsudoを使用する方法はありますか?

ところで:Emacsはサーバーにインストールされていません

4

5 に答える 5

203

Emacs 24.3の時点で、古いmulti:構文の類似物が最新のアプローチの上に階層化されていtramp-default-proxies-alistます。つまり、事前の構成なしでマルチホップを再度実行できます。詳細については、以下を参照してください。

C-hig (tramp)Ad-hoc multi-hops RET

新しい構文では、各「ホップ」は。で区切られ|ます。マニュアルの例は次のとおりです。

C-xC-f /ssh:bird@bastion|ssh:you@remotehost:/path RET

最初にとして接続しbird@bastion、そこからyou@remotehost:/path

/ su:または/ sudo:リモートホスト上

この構文を使用して、リモートホスト上のroot(またはもちろん他のユーザー)にsudo/suすることもできます。

C-xC-f /ssh:you@remotehost|sudo:remotehost:/path/to/file RET

重要:ホスト名を明示的に指定してください:sudo:remotehost:ではなくsudo::(以下を参照)。

これはまだ下のプロキシメカニズムを使用しているためtramp-default-proxies-alist、値を含める必要があります("remotehost" "root" "/ssh:you@remotehost:")

/ssh:you@remotehost:としてファイルを要求するたびにプロキシが使用されることを意味しますroot@remotehost

rootこれらのメソッドのデフォルトユーザーはですが、もちろん、次のコマンドを使用して非rootユーザーに変更することもできます。

C-xC-f /ssh:you@remotehost|sudo:them@remotehost:/path/to/file RET

常にリモートホスト名を明示的に指定してください

ホスト名の使用sudo::またはsu::省略に慣れている可能性があります。ローカルホストにとどまっている場合、これは問題ありませんが、リモートサーバーにホッピングしている場合は、前のホップと同じであっても、すべてのホップのホスト名を指定する必要があります。常にsudo:hostname:またはsu:hostname:リモートホストで使用してください。

ここでの罠は、sudo:: 実際には機能しているように見えることです。ただし、これを行うと、動的プロキシエントリのホストは、接続したホストではなく、発信元のホスト名になります。これは混乱を招くように見えるだけでなく(ファイルパスに間違ったホストが表示されるため)、ローカルホストでのその後の使用の試みsudo::が代わりにリモートサーバーにプロキシされることも意味します!(そして、2番目のサーバーで同じことをした場合、プロキシもおそらく破壊され、さらに問題が発生します)。

::つまり、マルチホップの場合は使用しないでください。

Emacs 27+

Emacs 27.1(またはGNUELPAパッケージを使用している場合はTramp2.4.2)以降、::ケースは直感的に機能し、独自のローカルホストではなく/ssh:you@remotehost|sudo::再利用されるため、不正なプロキシエントリが発生することはありません。remotehost

さらに、のようなもの/ssh:you@remotehost|sudo:localhost:が検出され、ユーザーエラーとしてフラグが付けられます。

27より前のバージョンを含むEmacsバージョンを混在させて使用する可能性がある場合(または古いバージョンを使用している可能性のある他の人にアドバイスしている場合)、::マルチホッピング時に安全でないものとして扱い続けるのが最も安全です。潜在的な事故。(つまり、トランプのバージョンが不明な場合は、正しいリモートホストを明示的に指定することが最も安全なアプローチです。)

于 2013-05-06T22:53:55.017 に答える
21

更新:この回答は元の問題を解決しましたが、emacs 20または21用に作成されました。emacs24については、より多くの説明があり、最新であるため、philsの回答を使用することをお勧めします。


トランプのマルチホップファイル名はあなたが探しているものだと思います。

最初のホップはsshで、2番目のホップはsudoです。


更新:最近のバージョンのemacsは、プロキシを使用した複数のホップをサポートしています。

(add-to-list 'tramp-default-proxies-alist ("my-sudo-alias" nil "/ssh:user@ssh-host"))

次に、以下を開いて呼び出します。

/sudo:my-sudo-alias:file-on-ssh-host
于 2010-02-01T17:45:33.130 に答える
7

選択した回答に問題がありました。ただし、この行を.emacsに追加すると機能しました。

(add-to-list 'tramp-default-proxies-alist '(".*" "\\`root\\'" "/ssh:%h:"))

そして、以下を実行しました:

/sudo:ssh-host:file-on-ssh-host

ある時点で「root」パスワードの入力を求められたため、少し混乱しましたが、ユーザーのパスワードを入力するとアクセスが許可されました。また、ネットワーク上のすべてのホストで普遍的に機能します。また、ルートにならないようにこれを行うこともできます。

/ssh:ssh-host:file-on-ssh-host

于 2010-06-30T17:41:22.787 に答える
3

トランプマルチホップ設定Webページから

 (add-to-list 'tramp-default-proxies-alist
                   '(nil "\\`root\\'" "/ssh:%h:"))
      (add-to-list 'tramp-default-proxies-alist
                   '((regexp-quote (system-name)) nil nil))

その後、任意の

C-x C-f /sudo:remote-host:/file

emacsを実行しているユーザーと同じユーザー名でログインした後、リモートマシンでsudoを使用してファイルを開きます。

于 2013-05-06T21:42:10.407 に答える
-13

最初にサーバーにSSHで接続し、次にemacsをローカルで実行する必要があります。

または、no_root_squashでNFSを使用するか、emacsサーバー/クライアントで試すことができますが、何が起こるかわかりません(emacsを自分で使用しないでください)

于 2010-02-01T15:46:49.017 に答える