Wie bearbeite ich Dateien aus der Ferne über ssh?

82

Ich muss einige Dateien bearbeiten, die sich auf einem Server befinden, den ich über ssh erreichen kann.

Ich würde es vorziehen, diese Dateien vimauf meiner Workstation benutzerdefiniert zu bearbeiten (ich habe keine Rechte zum Ändern der vimEinstellungen auf dem Remote-Server). Manchmal möchte ich eine Datei mit sublime textoder einem anderen GUI-Editor bearbeiten .

Natürlich kann ich diese Dateien herunterladen, lokal bearbeiten und wieder auf den Server hochladen. Gibt es eine elegantere Lösung?

Webstuhl
quelle

Antworten:

65

Sie können dies tun, indem Sie den Remote-Ordner mit sshfs als Dateisystem mounten. Dazu zunächst einige Voraussetzungen:

# issue all these cmds on local machine
sudo apt-get install sshfs 
sudo adduser <username> fuse

Führen Sie nun den Montagevorgang aus:

mkdir ~/remoteserv    
sshfs -o idmap=user <username>@<ipaddress>:/remotepath ~/remoteserv

Gehen Sie danach einfach in den bereitgestellten Ordner und verwenden Sie Ihr eigenes lokales benutzerdefiniertes vim.

shivams
quelle
4
Es ist nicht überraschend, dass der Installationsschritt bei Distributionen fehlschlägt, die nicht auf der Basis von Distributionen erstellt wurden debund daher keine haben apt-get. (In diesem Fall yumoder zyppermöglicherweise vorhanden.) Sie erfordern auch root auf dem lokalen Computer, der möglicherweise nicht verfügbar ist. (Das soll nicht heißen, dass es eine schlechte Lösung ist, aber es kommt mit einer großen Voraussetzung.)
Ulrich Schwarz
4
Okay. Herausgefunden. All dies erfolgt auf dem lokalen Computer. Im Falle von OS X muss man osxfuseund installieren sshfs. Diese können mit Homebrew ( brew install sshfsund brew cask install osxfuse/ oder aus Paketen von osxfuse.github.io
inspirednz am
95

Das kannst du so machen scp:

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

Beachten Sie die beiden Schrägstriche //zwischen Server und Pfad, die erforderlich sind, um den absoluten Pfad korrekt aufzulösen. (Der erste Schrägstrich ist syntaktisch, während der zweite Schrägstrich wie üblich das Stammverzeichnis des Remotebenutzers angibt. Um mit dem Ausgangsverzeichnis zu beginnen, müssen Sie dies tun [:port]/~/path/to/file.txt.) [:port]Ist optional.

Dies wird vom vim- Standard-Plugin netrw.vim erledigt . Es werden verschiedene andere Protokolle unterstützt.

FloHimself
quelle
6
Ja, die Datei wird in eine temporäre Datei abgerufen, die beim Speichern auf den Server hochgeladen wird.
FloHimself
1
Danke. Beim Versuch, eine Datei zu speichern, ist jedoch ein Fehler aufgetreten:E382: Cannot write, 'buftype' option is set
Loom
2
Sie können es :set buftype=""​in vim versuchen .
FloHimself
2
Darüber hinaus liest ~/.ssh/configund löst vim Remote-Hosts mit vim scp://[host]/path.
Jangari
2
@Stillanoob::e scp://...
FloHimself
6

Abhängig davon, was Sie meinen, wenn Sie sagen, dass Sie nicht die Rechte zum Bearbeiten der Vim-Einstellungen haben, gibt es möglicherweise eine Möglichkeit, Vim auf dem Server so zu verwenden, wie Sie es möchten. Wenn Sie Ihren Benutzer nicht ändern können .vimrc(z. B. weil Sie sich als freigegebener Benutzer anmelden), aber dennoch Dateien erstellen können, erstellen Sie ihn als eine Datei mit dem Namen, sagen wir, Loom.vimrcund rufen Sie dann Vim mit dem -uSchalter auf:

vim -u ~/Loom.vimrc file_to_edit

Sie können auch dann einen Alias ​​verwenden: alias vim='vim -u ~/Loom.vimrc'Damit können Sie Vim wie gewohnt verwenden und Ihre benutzerdefinierte .vimrcDatei wird trotzdem geladen . Dieser Alias ​​bleibt nach dem Abmelden nicht bestehen, sodass Sie sich keine Sorgen machen müssen, dass jemand anderes versehentlich Ihren angepassten Vim verwendet.

Tom Potts
quelle
2

Je nachdem, wie viele Dateien und welche Art von Dateien Sie bearbeiten möchten, ist dies möglicherweise nicht genau das, was Sie hier tun möchten, aber ich denke, es ist erwähnenswert. Wenn Sie Dateien auf einem Remote-Server bearbeiten müssen, aber alles, was Sie haben, auf Ihrer eigenen Arbeitsstation verwenden möchten, sollten Sie in Betracht ziehen, eine Art Revisionskontrollsystem auf Ihren Computern zu verwenden. Auf diese Weise können Sie Ihre lokalen Kopien auf Ihrem eigenen Computer mit der Software Ihrer Wahl ändern, die Änderungen festschreiben und dann einfach die lokalen Kopien auf dem Zielcomputer aktualisieren. Sie können die Dateien nicht nur mit der Software bearbeiten, mit der Sie sich wohl fühlen, sondern auch die Änderungshistorie für jede Datei, was immer gut ist.

Hier ist eine Liste der Revisionskontrollsoftware für alle Fälle.

jimm-cl
quelle
Deuten Sie die Verwendung von so etwas wie die Änderungen commiting zu git, es zu etwas drängen wie github, und die Änderungen von Ziehen githubauf dem lokalen Rechner, zu ändern dort zu machen?
Alpha_989
Das ist für komplexe Codeänderungen machbar, aber für einfache Codeänderungen vielleicht. Was @FloHimself oder Shivams erwähnt, ist einfacher zu implementieren.
alpha_989
1

Um die Antwort von Mr. Potts zu erweitern: Sie können auch die obigen Schritte ausführen und dann so etwas in .bash_profile einfügen (oder was auch immer Ihre Shell verwendet):

if [[ "$(who mom loves | awk ' { print $1 }' )" == "Loom" ]]; then 
         alias vim="vim -u ~/.Loom_vimrc"  
         fi  

Dabei ist Loom Ihre ursprüngliche Benutzer-ID, unter der Sie sich anmelden.

Wenn Sie sich als gemeinsamer Account anmelden (und nicht als einzelner Account, dann klagt sudo), ist Von Neuman möglicherweise barmherzig, weil Sie verloren sind.

Ich hätte dies in einen Kommentar eingefügt, aber ich konnte den Code überhaupt nicht formatieren.

Petro
quelle
0

Wenn Sie eine VIM-Sitzung haben, die bereits ausgeführt wird, verwenden Sie

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

Das :silentvordere unterdrückt die Press Enter to ContinueNachricht

und

e scp://user@myserver[:port]//path/to/file.txtist der ExBefehl mode zum Bearbeiten der Remnotendatei.

Getestet unter BitVise SSHDWindows 10 und mit VIM unter Ubuntu 16.04

alpha_989
quelle
Nur ein Hinweis, dass dies Press Enter to Continuedas erstmalige Laden unterdrückt , aber nicht für alle nachfolgenden:w
Sparhawk