Kann vim eine Remote-Datei als root bearbeiten?

10

Ich habe diese Frage gefunden , die erklärt, wie man eine Remote-Datei mit vim bearbeitet, indem man:

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

Ist es möglich, dies als root (via sudo) auf dem Remote-Host zu tun ?

Ich habe versucht, eine Datei mit Root-Berechtigungen auf dem Remote-Host zu erstellen und mit den oben genannten zu bearbeiten. Vim kann den Inhalt sehen, bearbeiten und speichern, aber auf dem Remote-Host ändert sich nichts (wahrscheinlich, weil vim nur seine temporäre Datei speichert und diese dann an scp weitergibt, um sie zurückzusetzen?)

Wenn Sie dies mit einer von meinem Benutzer gespeicherten Datei tun, verhält es sich wie erwartet.

Mein SSH verwendet einen Schlüssel zur Authentifizierung und der Remote-Server verfügt über NOPASSWD für meinen Sudo-Zugriff

Diese Frage ist ähnlich, aber die einzige Antwort mit Stimmen verwendet Marionette, was definitiv nicht das ist, was ich verwenden möchte.


Bearbeiten: Als Antwort auf den Kommentar von @ drawbenn unten ist hier mein vollständiger Bearbeitungsprozess:

vim scp://nagios//tmp/notouch

Wo /tmp/notouchsich die Datei im Besitz von root befindet, wird vim schnell angezeigt

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

Dies verschwindet automatisch und es entsteht ein leerer schwarzer Bildschirm mit dem Text

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

Durch Drücken der Eingabetaste kann ich die Datei bearbeiten

Beim Speichern wird derselbe scp-Befehl wie am Anfang angezeigt, der schnell und automatisch verschwindet (es ist schwierig, ihn rechtzeitig zu lesen, aber die Dateien scp und / tmp / ... sind definitiv vorhanden).

Mitch
quelle
2
Nur sshzum Server und bearbeiten Sie die Datei dort (mit visudooder was auch immer). Alles andere hat Auswirkungen auf die Sicherheit.
Satō Katsura
@SatoKatsura Ich sehe keine wirklichen Auswirkungen auf die Sicherheit, außer dass eine Kopie der Remote-Datei auf Ihrem lokalen Host vorhanden ist. Ich möchte meine lokale Version von vim aufgrund der Version und für meine .vimrcDatei verwenden
Mitch
Warum nicht stattdessen das Konfigurationsmanagement verwenden, um die Dateien in die Produktion zu verschieben (oder zu ziehen)? Dann können Sie einfach Ihren lokalen Editor verwenden.
Thrig
@rewbenn Ich habe die Frage mit einer Bearbeitung aktualisiert, die den vollständigen Prozess zeigt, den ich verwende
Mitch
Hmmm ... funktioniert das nicht? ssh -t host sudo vim file?
Kusalananda

Antworten:

9

Ich werde sagen, dass dies nicht möglich ist, weil vimkeine Remote-Befehle ausgeführt werden. Es wird einfach verwendet, scpum die Datei zu kopieren, lokal zu bearbeiten und scpwenn Sie fertig sind, zurück. Wie in dieser Frage angegeben, ist sudo via scpnicht möglich und es wird empfohlen, dass Sie entweder die Berechtigungen ändern, um das zu erreichen, was Sie möchten, oder einfach auf den Remote-Computer übertragen.

Zachary Brady
quelle
Nicht die Antwort, auf die ich gehofft hatte, aber sie scheint die richtige zu sein. Vielleicht schreibe ich ein Plugin, um das
Mitch
Hey @Mitch, hast du eine Lösung / ein Plugin gefunden, um dein Problem anzugehen? Ich erlebe genau die gleiche Situation! Vielen Dank!
Bruno Belotti
4

Wie die akzeptierte Antwort denke ich nicht, dass dies direkt möglich ist.

Ich sehe jedoch mindestens zwei Möglichkeiten, um Ihr Ziel noch zu erreichen.

Remote-Ausführung von vim

ssh user@myserver sudo vim /some/file

Dies hat Nachteile:

  • Ihre Interaktionen mit vim gehen über das Netzwerk. Eine erhebliche Verzögerung ist ärgerlich, und wenn Ihre Verbindung unterbrochen wird, ist dies auch für vim (eventuell) der Fall.
  • Dies verwendet nicht Ihre lokale vim-Konfiguration, sondern die vim-Konfiguration des Remote-Roots.

Aber es hat den Vorteil zu arbeiten.

Den scp außerhalb von vim machen

Sie können die Datei einfach lokal kopieren, bearbeiten und zurückkopieren. Und Sie könnten das automatisieren, um es fast so nahtlos zu machen wie die scp-Unterstützung von vim.

So etwas wie das folgende Shell-Skript könnte funktionieren (Hinweis, völlig ungetestet!):

#! /bin/sh

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

Dies würde es Ihnen ermöglichen, so etwas zu tun rvim user@myserver /some/file. Die lokale Kopie bleibt sogar erhalten, wenn die zweite Übertragung fehlschlägt, sodass Sie Ihre Änderungen nicht verlieren.

Das Skript könnte viele Verbesserungen gebrauchen (zumindest Fehlerprüfung), aber es ist ein Ausgangspunkt.

marcelm
quelle
3

Sie benötigen das Root-Passwort oder haben Ihren öffentlichen SSH-Schlüssel in ~ root / .ssh / authorized_keys. Sobald Sie das hatten, könnten Sie wahrscheinlich tun

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

Fazit: Dies ist praktisch nur eine Abkürzung für

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

Wenn Sie dazu über den erforderlichen Zugriff verfügen, haben Sie den erforderlichen Zugriff, um das Netzwerkzugriffs-Plugin von vim zu verwenden. Wenn nicht, dann nicht.

Wie Zachary Brady betont, sudoist nicht beteiligt. Sie benötigen SSH-Zugriff auf das Root-Konto.

Hast du es versucht?

Edward Falk
quelle
1
Ich habe kein Root-Passwort und bin mir nicht sicher, ob ich meinen Schlüssel ohne Erlaubnis der Benutzer des Servers dort ablegen kann. Die wahre Abkürzung, die es für mich tut, rettet mich vor SSHING, Sudo CPING, SCPING, Bearbeiten, SCPING, SSHING, Sudo CPING (da mein Benutzer die Datei nicht lesen kann). SSHFS kann der Weg sein, um hierher zu kommen
Mitch
Es besteht eine gute Chance, dass sshfs auch nicht funktioniert, wenn Sie keinen ssh-Zugriff auf root haben. Das Remote-Dateisystem wird wahrscheinlich nur mit Ihren Berechtigungen bereitgestellt. Ich denke zu diesem Zeitpunkt ist Ihre einzige Optionssh remotesystem sudo vim file
Edward Falk
Sie haben Recht - sshfs funktioniert nicht (und Sie haben mich darauf hingewiesen, dass ich mir versehentlich eine Reihe von Dateien angesehen habe, die nicht hätten sein sollen ...), obwohl ich dachte, dass es funktioniert
Mitch
1
@Mitch - Die Personen, denen der Server gehört, haben Ihnen ein Benutzerkonto gegeben, und ich glaube, Sie sind dafür verantwortlich, wofür Sie dieses Konto verwenden. Sie platzieren dort einen öffentlichen Schlüssel, den jeder mit Zugriff auf dieses Konto verwenden kann. Sie binden die Berechtigungen dieses Kontos an den Besitz des privaten Schlüssels, so weit es die Kenntnis des Passworts zulässt. dh aus Sicht des Servers gibt es keinen Unterschied zwischen einem Schlüssel oder der Kenntnis des Passworts.
Gro♀
Fazit: Ich denke, Sie können zu Recht zögern, Ihren öffentlichen Schlüssel auf diesem Server abzulegen. Ich denke, Sie stecken mit ssh / sudo vim fest
Edward Falk