Может ли 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 / …, безусловно, есть)

  • Что делает ttyctl -f, и почему он позволяет управлять потоком в vim, mutt и т. Д.?
  • Сделать VIM действующим как Notepad ++ на концы смешанной линии
  • Nano vs Vim или Vi
  • В xterm (mintty, bash), как я могу открыть файл в существующем процессе vim?
  • Показать строки состояния vim и tmux на одной строке
  • vim script: как изменить «put =» на append?
  • tmux вызывает смелые шрифты в vim
  • Перенаправить вывод команды VI в файл
  • 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-доступ к корневой учетной записи.

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

    Interesting Posts

    Является ли `~ / Documents` относительным или абсолютным путем?

    Использование именованного канала в качестве входа ffmpeg / avconv для потоковой передачи

    Может ли VM обменяться основной памятью?

    Subversion на сервере Ubuntu – проблемы с настройкой

    Почему FOSS 3d работает так плохо, по сравнению с проприетарным. Попытка понять

    /etc/X11/xorg.conf.d отсутствует?

    Как привязать камеры USB v4l2 к тем же именам устройств даже после перезагрузки?

    Как присвоить значение ключу пути в файле .desktop, включая переменную среды $ HOME, правильно?

    Количество отсчетов подстроки в строке

    Как я могу записать выходные данные сценария Shell в файл журнала

    Какие потенциальные проблемы могут быть вызваны «удалением» явного ядра?

    postfix отправитель mailaddress переписать на основе получателя mailaddress

    Как сделать экспортированные переменные оболочки постоянными?

    Как запустить скрипт kwin из командной строки?

    Dell XPS 13 9350 wifi умирает с ядрами Broadcom BCM4350 и 4.8

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