web-dev-qa-db-ja.com

EmacsでSSHおよびSudoを介してファイルを開く

リモートサーバー上にある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はサーバーにインストールされていません

107
Fernando Briano

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:リモートホスト上

この構文を使用して、リモートホスト上のルート(またはもちろん他のユーザー)に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::を使用し、ホスト名を省略することに慣れているでしょう。 localhostにstayingである場合、これで問題ありませんが、リモートサーバーにホッピングする場合はmustホップごとにホスト名を指定します-前のホップのホスト名と同じ場合でも。リモートホストでは常にSudo:hostname:またはsu:hostname:を使用してください。

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

要するに、マルチホップするときに::を使用しないでください!

171
phils

Update:この回答は元の問題を解決しましたが、emacs 20または21向けに書かれています。emacs24の場合、 philsのanswer より多くの説明を提供し、最新のものであるため。


Trampの multi-hop filenames が探しているものだと思います。

最初のホップは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
21
Dave Bacher

選択した答えに問題がありました。ただし、この行を.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

7
User1

トランプマルチホップ設定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を使用してファイルを開きます。

3
vampolo