[解決済み] 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はサーバーにインストールされていません。
解決方法は?
Emacs 24.3では、旧来の
multi:
構文の上に、現代的な
tramp-default-proxies-alist
アプローチに重ねることで、事前の設定なしに再びマルチホップを実行できるようになったことを意味します。詳細は、以下を参照してください。
c-h
i
g
(tramp)Ad-hoc multi-hops
RET
新しい構文では、各「ホップ」の区切りは
|
. マニュアルの例では
C-x
C-f
/ssh:bird@bastion|ssh:you@remotehost:/path
RET
これは、まず
bird@bastion
となり、そこから
you@remotehost:/path
リモートホストで /su: または /sudo: を使用します。
この構文を使って、リモートホストの root (またはもちろん他のユーザ) に sudo/su を行うこともできます。
C-x
C-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-x
C-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 (または GNU ELPA パッケージを使用している場合は Tramp 2.4.2) 以降は
::
のようなケースは直感的に動作します。
/ssh:you@remotehost|sudo::
は再利用されます。
remotehost
を再利用しますので、不正なプロキシエントリで終わることはありません。
さらに
/ssh:you@remotehost|sudo:localhost:
などは、ユーザーエラーとして検出され、フラグが立てられます。
27より前のバージョンを含む様々なEmacsを使う可能性がある場合(あるいは古いバージョンを使っている可能性のある人に助言する場合)には、引き続き、以下のように扱うのが最も安全でしょう。
::
を安全でないものとして扱い続けるのが最も安全でしょう。 (つまり、Tramp のバージョンが不明な場合、正しいリモート ホストを明示的に指定することが最も安全なアプローチであることに変わりはありません)。
関連
-
[解決済み] ssh "パーミッションが開きすぎています "エラー
-
[解決済み] Git上でシェルコマンドを実行する際に使用するSSH-keyの秘密鍵を指定する方法は?
-
[解決済み] Emacsがバックアップファイルを作成する方法を制御するにはどうすればよいですか?
-
[解決済み】vimの「sudoで書く」トリックはどうやるの?
-
[解決済み] Emacsの中でsu/sudoを使ってファイルを開く
-
[解決済み] Emacsで*scratch*バッファを再オープンする?
-
[解決済み] emacsの分割画面の大きさを変えるには?
-
[解決済み] .emacs.dディレクトリにあるものをすべてバイトコンパイルするには?
-
[解決済み] Emacsは私を良いプログラマーにしてくれますか?[クローズド]
-
[解決済み] 現在のファイルのフルパスをミニバッファに表示する機能
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ディスク上のファイルが変更されたとき、Emacsがすべてのバッファを自動で更新するようにするには?
-
[解決済み] Emacsの中でsu/sudoを使ってファイルを開く
-
[解決済み] EmacsをIDEとして使用する
-
[解決済み] Emacsでパッケージの更新をする
-
[解決済み] emacsの分割画面の大きさを変えるには?
-
[解決済み] Emacsでコードの折りたたみ効果を得るには?
-
[解決済み] Emacsは私を良いプログラマーにしてくれますか?[クローズド]
-
[解決済み] Emacsでファイルの読み取り/書き込みモードを変更するには?
-
[解決済み] LinuxでEmacsから他のアプリケーションにテキストをコピーする方法
-
[解決済み] emacs/elispです。ハッシュ(ポンド、数字記号、オクトパス)記号は何のために使うのですか?