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

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

見つけました。この問題vimを使用してリモートファイルを編集する方法について説明します。

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

sudoリモートホストからルート(パス)でこれを実行できますか?

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

私のユーザーが保存したファイルでこれを行うと、期待どおりに機能します。

私のSSHは認証にキーを使用し、リモートサーバーにはsudoアクセス用のNOPASSWDがあります。

この問題似ていますが投票の唯一の答えは人形を使用しますが、これは確かに私が使用したいものではありません。


編集:以下の@drewbennのコメントに応じて、完全な編集プロセスは次のとおりです。

vim scp://nagios//tmp/notouch

/tmp/notouchルートが所有するファイルはどこにありますか? 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/...ファイルは間違いなくそこにあります)。

答え1

vimリモートコマンドが実行されていないので不可能だと言いたいです。scpファイルをコピーしてローカルで編集し、完了scpしたら返します。で述べたようにこの問題 sudoViascpは不可能です。目的を達成するために権限を変更するか、リモートシステムにSSHで接続することをお勧めします。

答え2

許可された答えと同様に、これは直接可能であるとは思わない。

しかし、私はあなたの目標を達成するために少なくとも2つの方法があると思います。

リモートでvimを実行する

ssh user@myserver sudo vim /some/file

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

  • vimとの相互作用はネットワークを介して行われます。目立つ遅延は迷惑になる可能性があり、接続が失われるとvimも同様です(結局)。
  • これはローカル vim 設定を使用せず、リモートルートの vim 設定を使用します。

しかし、1つの利点がありますが、それが効果があるということです。

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のネットワークアクセスプラグインを使用するために必要なアクセス権があります。そうでなければそうではありません。

ザカリー・ブラディ(Zachary Brady)が指摘したように、sudo彼はその仕事には何もしませんでした。ルートアカウントへのSSHアクセスが必要です。

試してみましたか?

答え4

この回避策の前提条件(scpの代わりにrsyncを使用):リモートシステムでPasswordless1を設定する
必要があります。sudo

1.)まず、ローカルのvim設定でrsyncコマンドを変更します。

:let g:netrw_rsync_cmd='rsync --rsync-path="sudo rsync"'

したがって、「rsync」だけでなく、リモートホストでも「sudo rsync」を実行します。:h netrw-externapp

2.)ファイルの読み取り:
ホスト名の後にvimのように書き込ま:/filenameないでください。//filename

:e rsync://myhost.net:/etc/apt/sources.list

3.) ファイルへの書き込み

:e rsync://myhost.net:/etc/apt/sources.list

x.) 考えられるエラーを印刷するには、次のようにします。

:verbose e rsync://myhost.net:/etc/my_file

関連情報