Может ли vim редактировать удаленный файл с правами root?

Я нашел этот вопрос, который объясняет, как редактировать удаленный файл с помощью vim, используя:

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

Возможно ли это сделать как root (через sudo ) на удаленном хосте?

Я попытался создать файл с правами root на удаленном хосте и отредактировать его с помощью вышеперечисленного. Vim может видеть содержимое, редактировать его и сохранять, но ничего не меняется на удаленном хосте (возможно, потому, что vim просто сохраняет его временный файл, а затем дает это scp для возврата?)

Когда вы делаете это с файлом, сохраненным моим пользователем, он ведет себя так, как ожидалось.

Мой SSH использует ключ для аутентификации, а удаленный сервер имеет NOPASSWD для моего доступа к sudo

Этот вопрос схож, но единственный ответ с голосами использует марионетку, которая определенно не то, что я хочу использовать.


Изменить: В ответ на комментарий @ drewbenn ниже, вот мой полный процесс для редактирования:

 vim scp://nagios//tmp/notouch 

Где /tmp/notouch – файл, принадлежащий root, я вижу, что vim быстро показывает

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

Это автоматически уходит, чтобы получить пустой черный экран с текстом

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

Нажатие ввода позволяет мне редактировать файл

Сохранение всплывает в том же виде scp-команды, что и начало, которое быстро и автоматически уходит (трудно прочитать его вовремя, но файлы scp и / tmp / …, безусловно, есть)

  • Две разные версии VIM
  • vim / emacs для просмотра рекурсивных результатов поиска grep?
  • Использование vim для просмотра содержимого файла каталога
  • Какие пакеты необходимы для установки vim на Fedora?
  • Подсветка синтаксиса Vim терпит неудачу с автосессией
  • Есть ли способ редактировать защищенный паролем файл без повторного ввода пароля?
  • Редактировать столбчатые данные в vim
  • Сделать vimdiff отображать разные строки как разные строки (не отчасти разные)
  • 3 Solutions collect form web for “Может ли vim редактировать удаленный файл с правами root?”

    Я собираюсь сказать, что это невозможно, потому что vim не выполняет удаленные команды. Он просто использует scp чтобы скопировать файл, отредактировать его локально и scp его, когда закончите. Как указано в этом вопросе sudo через scp невозможно, и рекомендуется либо изменять разрешения для выполнения того, что вы хотите, либо просто передать ssh на удаленную машину.

    Как и принятый ответ, я не думаю, что это возможно напрямую.

    Тем не менее, я вижу по крайней мере два пути для достижения вашей цели.

    Запуск vim удаленно

     ssh user@myserver sudo vim /some/file 

    Это имеет недостатки:

    • Ваши взаимодействия с vim проходят через сеть. Значительное отставание будет раздражать, и если ваша связь умирает, значит, и vim (в конце концов).
    • Это не будет использовать вашу локальную конфигурацию vim, но конфигурацию vim для корневого каталога пула.

    Но у него есть преимущество в работе.

    Выполнение scp вне vim

    Вы можете просто скопировать файл по локальной сети, отредактировать его и скопировать. И вы можете автоматизировать это, чтобы сделать его почти таким же бесшовным, как поддержка scp vim.

    Нечто похожее на следующий скрипт оболочки может работать (обратите внимание, полностью непроверенный!):

     #! /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 . Он даже сохраняет локальную копию, если вторая передача не удалась, поэтому вы не потеряете свои изменения.

    Сценарий может использовать множество улучшений (по крайней мере, проверку ошибок), но это отправная точка.

    Вам понадобится пароль root или ваш общедоступный ключ ssh в ~ root / .ssh / authorized_keys. Как только вы это сделали, вы, вероятно, могли бы сделать

     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 не участвует. Вам потребуется ssh-доступ к корневой учетной записи.

    Ты это пробовал?

    Linux и Unix - лучшая ОС в мире.