vimはリモートファイルをrootとして編集できますか?


10

私はvimを使用してリモートファイルを編集する方法を説明するこの質問を見つけました:

vim scp://user@myserver[:port]//path/to/file.txt

sudoリモートホストで(を介して)rootとしてこれを行うことはできますか?

リモートホストでroot権限を持つファイルを作成し、上記で編集してみました。Vimはコンテンツを表示、編集、保存できますが、リモートホストでは何も変更されません(おそらくvimが一時ファイルを保存し、それをscpに戻して戻すためでしょうか?)

ユーザーが保存したファイルを使用してこれを行うと、期待どおりに動作します。

SSHはキーを使用して認証し、リモートサーバーはsudoアクセス用にNOPASSWDを持っています

この質問は似ていますが、投票での唯一の回答は人形を使用しています。


編集:以下の@drewbennのコメントに応じて、編集のための私の完全なプロセスを以下に示します。

vim scp://nagios//tmp/notouch

/tmp/notouchrootが所有するファイルはどこですか、vimがすぐに表示されます

:!scp -q 'nagios:/tmp/notouch' '/tmp/vaHhwTl/0'

これは自動的に消え、テキストを含む空の黒い画面が表示されます

"/tmp/vaHhwTl/0" 1L, 12C
Press ENTER or type command to continue

Enterキーを押すと、ファイルを編集できます

保存すると、最初と同じ種類のscpコマンドがポップアップ表示され、すばやく自動的に削除されます(時間内に読み取ることは困難ですが、scpおよび/ tmp / ...ファイルは確実に存在します)。


2
ただsshサーバーに行き、そこでファイルを編集します(visudo、またはその他)。それ以外のものはセキュリティに影響を与えます。
佐藤桂2016

@SatoKatsuraローカルホストにリモートファイルのコピーを置くこと以外に、実際のセキュリティへの影響はありません。バージョンと.vimrcファイルのためにローカルバージョンのvimを使用したい
ミッチ

代わりに、構成管理を使用してファイルを運用環境にプッシュ(またはプル)しないのはなぜですか?その後、ローカルエディターを使用できます。
2016年

@drewbenn私が使用している完全なプロセスを示す編集で質問を更新しました
Mitch

うーん...これはうまくいきませんか? ssh -t host sudo vim file
クサラナンダ

回答:


9

vimはリモートコマンドを実行していないため、これは不可能だと言います。それは単にscpファイルをコピーしてローカルで編集しscp、完了したら元に戻すために使用しています。この質問で 述べたようにsudovia scpは不可能であり、必要なことを達成するためにアクセス許可を変更するか、リモートマシンにSSHで接続することをお勧めします。


私が望んでいた答えではありませんが、正しいようです。たぶん私はこの..周りを取得するためのプラグインを記述します
ミッチ

@ミッチさん、問題に対処するためのソリューション/プラグインを見つけましたか?私はまったく同じ状況を経験しています!ありがとう!
Bruno Belotti 2017

4

受け入れられた答えのように、これは直接可能ではないと思います。

ただし、目標を達成するには、少なくとも2つの方法があります。

vimをリモートで実行する

ssh user@myserver sudo vim /some/file

これには欠点があります。

  • vimとのやり取りはネットワークを介して行われます。大幅な遅延は煩わしいものになり、接続が停止するとvim(最終的には)も停止します。
  • これはローカルのvim設定を使用しませんが、リモートのルートのvim設定を使用します。

しかし、それは働くという利点があります。

vimの外でscpを行う

ローカルにファイルをコピーして編集し、コピーするだけです。そして、それを自動化して、vimのscpサポートとほぼ同じくらいシームレスにすることができます。

次のシェルスクリプトのようなものが機能する可能性があります(注、完全にテストされていません!):

#! /bin/sh

TMPFILE=$(mktemp)
ssh -- "$1" sudo cat "'$2'" > ${TMPFILE}
vim ${TMPFILE}
ssh -- "$1" "sudo tee '$2' > /dev/null" < ${TMPFILE} && \
  rm -f ${TMPFILE}

これにより、のようなことができるようになりますrvim user@myserver /some/file。2回目の転送が失敗した場合でもローカルコピーが保持されるため、変更内容が失われることはありません。

スクリプトは多くの改善を(少なくともエラーチェックで)使用できますが、それは出発点です。


3

rootパスワードが必要になるか、〜root / .ssh / authorized_keysに公開sshキーが必要になります。それができたら、おそらくできるでしょう

vim scp://root@nagios//tmp/notouch

結論:これは事実上、

scp root@nagios:/tmp/notouch /tmp/notouch
vim /tmp/notouch
scp /tmp/notouch root@nagios:/tmp/notouch

それを行うために必要なアクセス権がある場合、vimのネットワークアクセスプラグインを使用するために必要なアクセス権があります。そうでない場合は、そうではありません。

ザカリーブレイディが指摘するように、sudo関与していません。rootアカウントへのsshアクセスが必要です。

試しましたか?


1
rootパスワードがないので、サーバーの所有者から許可を得ずに自分のキーをそこに入れても問題ないと思います。それが私のためにやっている真の近道は、ssh-ing、sudo cp-ing、scp-ing、editing、scp-ing、ssh-ing、sudo cp-ing(ユーザーがファイルを読み取ることができないため)から私を救うことです。sshfsはここへの道かもしれません
ミッチ

rootへのsshアクセスがないと、sshfsが機能しない可能性が十分にあります。リモートファイルシステムは、ユーザーの権限のみでマウントされる可能性があります。私はこの時点で、あなたの唯一の選択肢はssh remotesystem sudo vim file
エドワードフォークが

あなたは正しいです-sshfsは機能しません(そして、私が誤って大量のファイルを誤って自分に捨ててしまったはずだと私に指摘しました...)と思っていました
Mitch

1
@Mitch-サーバーを所有している人からユーザーアカウントが提供されました。私は、そのアカウントを何に使用するかについて責任を負うと信じています。あなたはそこに、そのアカウントへのアクセス権を持つ誰でもできる公開鍵を配置しています。あなたは、パスワードの知識が許す限り、そのアカウントの許可を秘密鍵の所持と結びつけています。つまり、サーバーの観点からは、キーを持っていることとパスワードを知っていることの間に違いはありません。
2016年

結論:そのサーバーに公開鍵を置くことをためらうのは正しいと思います。ssh / sudo vimで行き詰まっていると思います
Edward Falk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.