Czy vim może edytować plik zdalny jako root?

10

Znalazłem to pytanie, które wyjaśnia, jak edytować plik zdalny za pomocą vima przy użyciu:

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

Czy można to zrobić jako root (via sudo) na zdalnym hoście?

Próbowałem utworzyć plik z uprawnieniami administratora na zdalnym hoście i edytować go za pomocą powyższego. Vim widzi zawartość, może ją edytować i może ją zapisać, ale nic się nie zmienia na zdalnym hoście (prawdopodobnie dlatego, że vim zapisuje tylko swój plik tymczasowy, a następnie przekazuje go SCP, aby odłożyć?)

Robiąc to z plikiem zapisanym przez mojego użytkownika, działa on zgodnie z oczekiwaniami.

Mój SSH używa klucza do uwierzytelnienia, a serwer zdalny ma NOPASSWD dla mojego dostępu sudo

To pytanie jest podobne, ale jedyną odpowiedzią głosującą jest marionetka, która zdecydowanie nie jest tym, czego chcę użyć.


Edycja: W odpowiedzi na komentarz @ drewbenn poniżej, oto mój pełny proces edycji:

vim scp://nagios//tmp/notouch

Gdzie /tmp/notouchjest plik należący do roota, widzę, że vim szybko pokazuje

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

Znika to automatycznie, dając pusty czarny ekran z tekstem

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

Naciśnięcie Enter pozwala mi edytować plik

Zapisywanie wyskakuje z tym samym rodzajem polecenia scp co na początku, który szybko i automatycznie znika (trudno jest odczytać go na czas, ale pliki scp i / tmp / ... są zdecydowanie dostępne)

Mitch
źródło
2
Po prostu sshna serwer i edytuj tam plik (za pomocą visudolub cokolwiek innego). Wszystko inne ma wpływ na bezpieczeństwo.
Satō Katsura,
@SatoKatsura Nie widzę żadnych rzeczywistych skutków dla bezpieczeństwa innych niż posiadanie kopii zdalnego pliku na twoim lokalnym hoście. Chcę używać mojej lokalnej wersji vima ze względu na wersję i dla mojego .vimrcpliku
Mitch
Dlaczego zamiast tego nie użyć zarządzania konfiguracją do wypchnięcia (lub wyciągnięcia) plików do produkcji? Następnie możesz po prostu użyć lokalnego edytora.
thrig
@drewbenn Zaktualizowałem pytanie edycją pokazującą pełny proces, którego używam
Mitch
Hmmm ... czy to nie działa? ssh -t host sudo vim file?
Kusalananda

Odpowiedzi:

9

Powiem, że nie jest to możliwe, ponieważ vimnie wykonuje zdalnych poleceń. Po prostu scpkopiuje plik, edytuje go lokalnie i scpwraca po zakończeniu . Jak stwierdzono w tym pytaniu sudo za pośrednictwem, scpnie jest możliwe i zaleca się albo zmodyfikować uprawnienia, aby osiągnąć zamierzony cel, albo po prostu ssh na zdalnym komputerze.

Zachary Brady
źródło
Nie była to odpowiedź, na którą liczyłem, ale wydaje się, że jest poprawna. Może napiszę wtyczkę, żeby to obejść ...
Mitch
Hej @Mitch, czy znalazłeś jakieś rozwiązanie / wtyczkę, aby rozwiązać swój problem? Mam dokładnie taką samą sytuację! Dzięki!
Bruno Belotti
4

Podobnie jak zaakceptowana odpowiedź, nie sądzę, że jest to możliwe bezpośrednio.

Widzę jednak co najmniej dwa sposoby, aby nadal osiągnąć swój cel.

Uruchamianie vima zdalnie

ssh user@myserver sudo vim /some/file

Ma to wady:

  • Twoje interakcje z vimem przechodzą przez sieć. Znaczne opóźnienie będzie denerwujące, a jeśli twoje połączenie umrze, tak samo robi vim (ostatecznie).
  • To nie użyje twojej lokalnej konfiguracji vima, ale konfigurację vima głównego użytkownika zdalnego.

Ale ma tę zaletę, że działa.

Robienie scp poza vimem

Możesz po prostu skopiować plik lokalnie, edytować go i skopiować z powrotem. Możesz to zautomatyzować, aby uczynić go niemal tak bezproblemowym, jak obsługa SCP przez vima.

Może działać coś takiego jak poniższy skrypt powłoki (uwaga, w pełni nieprzetestowane!):

#! /bin/sh

TMPFILE=$(mktemp)
ssh -- "$1" sudo cat "'$2'" > ${TMPFILE}
vim ${TMPFILE}
ssh -- "$1" "sudo tee '$2' > /dev/null" < ${TMPFILE} && \
  rm -f ${TMPFILE}

To pozwoli ci zrobić coś takiego rvim user@myserver /some/file. Nawet zachowuje kopię lokalną, jeśli drugi transfer się nie powiedzie, więc nie stracisz swoich zmian.

Skrypt może korzystać z wielu ulepszeń (przynajmniej sprawdzania błędów), ale jest to punkt wyjścia.

marcelm
źródło
3

Będziesz potrzebował hasła roota lub mieć swój publiczny klucz ssh w ~ root / .ssh / Author_keys. Gdy już to masz, prawdopodobnie możesz to zrobić

vim scp://root@nagios//tmp/notouch

Podsumowując: jest to w rzeczywistości tylko skrót

scp root@nagios:/tmp/notouch /tmp/notouch
vim /tmp/notouch
scp /tmp/notouch root@nagios:/tmp/notouch

Jeśli masz niezbędny dostęp do tego, masz niezbędny dostęp do korzystania z wtyczki dostępu do sieci vima. Jeśli nie, to nie.

Jak zauważa Zachary Brady, sudonie jest zaangażowany. Będziesz potrzebował dostępu ssh do konta root.

Próbowałeś tego?

Edward Falk
źródło
1
Nie mam hasła roota i nie jestem pewien, czy czuję się dobrze, wkładając tam swój klucz bez zgody osób, które są właścicielami serwera. Prawdziwym skrótem, który dla mnie robi, jest uratowanie mnie przed ssh-ing, sudo cp-ing, scp -ing, edycją, scp-ing, ssh-ing, sudo cp -ing (ponieważ mój użytkownik nie może odczytać pliku). sshfs może być
Mitch
Istnieje duża szansa, że ​​sshfs nie będzie działać, jeśli nie masz dostępu ssh do roota. Zdalny system plików byłby prawdopodobnie montowany tylko z twoimi uprawnieniami. Myślę, że w tym momencie twoją jedyną opcją jestssh remotesystem sudo vim file
Edward Falk
Masz rację - sshfs nie działa (i zwróciłeś mi uwagę, że przypadkowo przerzuciłem sobie kilka plików, które nie powinny być ...), choć myślałem, że to działa
Mitch
1
@Mitch - osoby, które są właścicielem serwera, dały ci konto użytkownika i, jak sądzę, ponosisz odpowiedzialność za to, z czego korzystasz na tym koncie. Umieszczasz tam klucz publiczny, który może mieć każdy z dostępem do tego konta. Wiążesz uprawnienia tego konta z posiadaniem klucza prywatnego, na ile pozwala znajomość hasła. tzn. z punktu widzenia serwera nie ma różnicy między posiadaniem klucza a znajomością hasła.
grochmal
Konkluzja: Myślę, że masz prawo zawahać się, aby umieścić swój klucz publiczny na tym serwerze. Myślę, że utknąłeś z ssh / sudo vim
Edward Falk