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


114

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


サーバー上で直接rootとしてコマンドを実行できませんか?
Chmouel Boudjnah、2010

2
sudo権限を持つユーザーがいますが、rootパスワードは持っていません。
Fernando Briano、2010

回答:


185

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:: -実際に作業に見える動的プロキシエントリのHOSTは、ホスト名になることをあなたが行うとき発祥ではなく、からあなたがに接続されたホストを。これは混乱を招くだけでなく(ファイルパスに間違ったホストが表示されるため)、sudo::ローカルホストでの以降の使用はリモートサーバーにプロキシされることにもなります。(また、2番目のサーバーで同じことを行った場合、プロキシも破壊されるため、さらに問題が発生します)。

つまり、使用しないでください ::マルチホップときに。


4
今だけでなく、wikemacsに追加wikemacs.org/index.php/TRAMP。フィルのおかげで、それは素晴らしい働きをします。
Ehvince 2013

1
私はこの答えを見つけました、そしてそれはうまくいきます... .ssh / configファイルで定義されたホスト名の省略形があることを除いて。と入力すると/sudo:hostname:/etc/hosts、期待どおりの結果が得られますが、と入力すると/sudo:abbrev:/etc/hosts、「ホストの省略形がリモートホストのように見えます。sudoはローカルホストしか使用できません」というメッセージが表示されます。これは修正可能ですか?
rogerl 2016年

2
rogerl:.ssh/configエントリもあり/ssh:abbrev|sudo:abbrev:/etc/hosts、ホスト名の省略形に使用しても問題はありません。最初にホストにホップしていないようです。
フィル

@phils多分私はこれを新しい質問として投稿するべきです。しかし、私の設定ファイルはHost r User rlipsett Hostname odlinux IdentityFile〜/ .ssh / id-rsa.pubのようにtramp-default-proxies-alist見え、正しいようです。それでも、上記で説明した動作は持続します。私の設定ファイルはどういうわけか間違っていますか?
rogerl 2016年

以前のコメントに入力したとおりに実際に使用しようとしているのか/sudo:abbrev:/etc/hosts(前述のように間違っています)、または正しいを使用しているかどうかは、まだはっきりしていません/ssh:abbrev|sudo:abbrev:/etc/hosts。ssh構成ファイルはおそらくそれで問題なく使用できるため、おそらく問題ありません。
フィル、2016年

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

これは解決策のようですが、「マルチメソッドはサポートされなくなりました」と表示されます。更新されたマニュアルを教えてもらえますか?
フェルナンドブリアーノ

Mx info、Cs tramp :) sudoのターゲットとして偽のホストを定義し、それをtramp-default-proxy-alistに追加する必要があるかもしれません。
Dave Bacher、2010

2
構成で実行できませんでした(エラー255?)が、.emacsの次の行は機能します:(set-default 'tramp-default-proxies-alist(quote(( "my-sudo-alias" nil " / ssh:user @ ssh-host: "))))
ang mo

更新された回答は「最近」を定義しておらず、無効なelispがあり、修正しても動作しません。更新された回答から1年以上にわたってリリースされたemacsの安定版を使用しています。
マイケルウルフ

1
2014 / 24.3 の実際の答えは、「アドホックマルチホップ」を使用した次の答えです
TomRoche

7

選択した回答で問題が発生しました。ただし、次の行を.emacsに追加すると機能しました。

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

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

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

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

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


3
これは私にとってはうまくいきませんでした。Ubuntuでは、少なくともバージョン23.2.1のEmacsとバージョン2.1.18-23.2のtrampでは、これは機能しないようです。この作品は、しかし:info.solomonson.com/content/...
gaizka

(set-default 'tramp-default-proxies-alist(quote(( "。*" "\` root \\' "" / ssh:%h: "))))
gaizka

1
上記のいずれのソリューションも機能しません(リストに追加またはデフォルトに設定)。1つ目はEmacsの起動時にチョークを発生させabc.xyz.com' looks like a remote host, 、2つ目は「/sudo:abc.xyz.com:」に2つ目のコロンを入力するとすぐに「ホストsudoはローカルホストしか使用できない」と表示します。アイデア?Ubuntu 10.04 LTS上のEmacs 23.1.1。
SabreWolfy

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を使用してファイルを開きます。


-12

まずサーバーにSSHでログインし、次にローカルでemacsを実行する必要があります。

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


試しましたが、sshfsでrootとしてファイルにアクセスできません。セットアップの問題だと思います。
Dan Andreatta、2010

Hassanが述べたように、no_root_squashは注意して使用する必要があります。
Dan Andreatta、2010

6
質問に答えない場合は-1。SSHではなくNFSを提案する場合は-1。-1はno_root_squashを提案します。リモート通信の問題について、通常Unixドメインソケットを使用するEmacsクライアントを提案する場合は-1。-1使用せずにEmacsについてブレザリングする場合。
16年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.