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


10

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

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

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

Я попытался создать файл с правами суперпользователя на удаленном хосте и отредактировать его с помощью вышеуказанного. 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

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

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


2
Просто sshна сервер и отредактируйте файл там (с visudoили как угодно). Все остальное имеет последствия для безопасности.
Satō Katsura

@SatoKatsura Я не вижу никаких реальных последствий для безопасности, кроме наличия копии удаленного файла на вашем локальном хосте. Я хочу использовать мою локальную версию vim из-за версии и для моего .vimrcфайла
Mitch

Почему бы вместо этого не использовать управление конфигурацией для передачи (или извлечения) файлов в производство? Тогда вы можете просто использовать свой местный редактор.
августа

@drewbenn Я обновил вопрос с правкой, показывающей весь процесс, который я использую
Mitch

Хммм ... разве это не работает? ssh -t host sudo vim file?
Кусалананда

Ответы:


9

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


Не тот ответ, на который я надеялся, но, похоже, правильный. Может быть, я напишу плагин, чтобы обойти это ..
Митч

Эй @ Митч, ты нашел какое-нибудь решение / плагин для решения твоей проблемы? У меня точно такая же ситуация! Спасибо!
Бруно Белотти

4

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

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

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

ssh user@myserver sudo vim /some/file

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

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

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

Делать scp вне vim

Вы можете просто скопировать файл локально, отредактировать его и скопировать обратно. И вы можете автоматизировать это, чтобы сделать его почти таким же удобным, как поддержка scim в 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. Он даже сохраняет локальную копию, если вторая передача не удалась, поэтому вы не потеряете свои изменения.

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


3

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

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


1
У меня нет пароля root, и я не уверен, что чувствую себя комфортно, вставляя свой ключ туда без разрешения людей, которые владеют сервером. Настоящий ярлык, который он делает для меня, - это спасение меня от ssh-ов, sudo-cp-ов, scp-ing, редактирования, scp-ing, ssh-ing, sudo cp-ing (так как мой пользователь не может прочитать файл). Sshfs может быть путь сюда
Митч

Есть хороший шанс, что sshfs тоже не будет работать, если у вас нет доступа по ssh к root. Удаленная файловая система, вероятно, будет монтироваться только с вашими разрешениями. Я думаю на данный момент, ваш единственный вариантssh remotesystem sudo vim file
Эдвард Фальк

Вы правы - sshfs не работает (и вы указали мне, что я случайно наколол себе кучу файлов, которых не должно было быть ...), хотя я думал, что это работает
Mitch

1
@Mitch - люди, которым принадлежит сервер, дали вам учетную запись пользователя, и, я полагаю, вы несете ответственность за то, для чего вы используете эту учетную запись. Вы размещаете там открытый ключ, доступный любому, имеющему доступ к этой учетной записи. Вы привязываете разрешения этой учетной записи к владению секретным ключом настолько, насколько позволяет знание пароля. т.е. с точки зрения сервера, нет никакой разницы между наличием ключа или знанием пароля.
grochmal

Итог: я думаю, что вы правы, не решаясь поставить свой открытый ключ на этот сервер. Я думаю, что вы застряли с ssh / sudo vim
Эдвард Фальк
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.