Чи може 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 Я не бачу реальних наслідків для безпеки, крім наявності копії віддаленого файлу у вашому localhost. Я хочу використовувати свою локальну версію vim завдяки версії та для свого .vimrcфайлу
Mitch

Чому б замість цього не використовувати управління конфігурацією для виштовхування (або витягування) файлів у виробництво? Тоді ви можете просто скористатися місцевим редактором.
триг

@drewbenn Я оновив питання редагуванням, показуючи повний процес, який я використовую
Mitch

Гммм ... це не працює? ssh -t host sudo vim file?
Kusalananda

Відповіді:


9

Я збираюся сказати, що це неможливо, оскільки vimне виконує віддалені команди. Це просто scpскопіювати файл, відредагувати його локально і scpповернути після завершення. Як зазначено в цьому запитанні sudo через, scpце неможливо, і рекомендується або змінити дозволи, щоб виконати те, що ви хочете, або просто перекинути на віддалену машину.


Не відповідь, на яку я сподівався, але, здається, є правильною. Можливо, я напишу плагін, щоб обійти це ..
Мітч

Привіт @Mitch, ти знайшов рішення / плагін для вирішення своєї проблеми? Я переживаю абсолютно таку ж ситуацію! Дякую!
Бруно Белотті

4

Як і прийнята відповідь, я не думаю, що це можливо безпосередньо.

Однак я бачу принаймні два способи все-таки досягти своєї мети.

Запуск програми vim віддалено

ssh user@myserver sudo vim /some/file

У цього є недоліки:

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

Але це має перевагу роботи.

Робити scp поза vim

Ви можете просто скопіювати файл локально, відредагувати та скопіювати назад. І ви можете автоматизувати це, щоб зробити його майже таким же безпроблемним, як підтримка scima 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

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

Ви пробували?


1
У мене немає пароля root, і я не впевнений, що мені зручно вводити свій ключ туди без дозволу людей, які володіють сервером. Справжній ярлик, який він робить для мене, врятує мене від ssh-ing, sudo cp-ing, scp-ing, редагування, scp-ing, ssh-ing, sudo cp-ing (оскільки мій користувач не може прочитати файл). sshfs може бути дорогою сюди
Мітч

Є хороший шанс, що sshfs не працюватиме, якщо у вас немає доступу до ssh до root. Віддалена файлова система, ймовірно, змонтується лише з вашими дозволами. Я думаю, що на даний момент ваш єдиний варіантssh remotesystem sudo vim file
Едвард Фолк

Ви маєте рацію - sshfs не працює (і ви вказали на мене, що я випадково перекинув собі купу файлів, які не повинні були бути ...), хоча я подумав, що це працює
Мітч

1
@Mitch - Люди, які володіють сервером, дали вам обліковий запис користувача, і, я вважаю, ви відповідаєте за те, чим ви користуєтесь цим обліковим записом. Ви розміщуєте там відкритий ключ, який міг би кожен, хто має доступ до цього облікового запису. Ви пов'язуєте дозволи цього акаунта на володіння приватним ключем стільки, скільки дозволяє знання пароля. тобто з точки зору сервера немає різниці між ключем або знанням пароля.
грохмаль

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