Comment puis-je éditer des fichiers à distance via ssh?

83

Je dois éditer des fichiers placés sur un serveur auquel je pourrais accéder via ssh.

Je préférerais éditer ces fichiers de manière personnalisée vimsur mon poste de travail (je n’ai pas le droit de modifier les vimparamètres sur le serveur distant). Parfois, j'aimerais éditer un fichier avec sublime textun autre éditeur graphique.

Bien sûr, je peux télécharger ces fichiers, les éditer localement et les réimporter sur le serveur. Y a-t-il une solution plus élégante?

Métier à tisser
la source

Réponses:

66

Pour ce faire, vous pouvez monter le dossier distant en tant que système de fichiers à l'aide de sshfs. Pour ce faire, d’abord quelques pré-requis:

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

Maintenant, faites le processus de montage:

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

Après cela, allez simplement dans le dossier monté et utilisez votre propre vim personnalisé local.

Shivams
la source
4
Sans surprise, l'étape d'installation échouera sur les distributions qui ne sont pas debbasées et qui ne l'ont donc pas apt-get. (Dans ce cas, yumou zypperpourraient être présents.) Ils ont également besoin de root sur la machine locale, qui peut être disponible ou non. (Cela ne veut pas dire que c'est une mauvaise solution, mais elle est accompagnée d'un préalable important.)
Ulrich Schwarz
5
D'accord. Deviner. Tout cela est fait sur la machine locale. Dans le cas de OS X, il faut installer osxfuseet sshfs. Ceux-ci peuvent être installés avec homebrew ( brew install sshfset brew cask install osxfuse, ou à partir de paquets obtenus à partir de osxfuse.github.io
inspirednz
95

Vous pouvez le faire via scpcomme ceci:

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

Notez les deux barres obliques //entre serveur et chemin, nécessaires pour résoudre correctement le chemin absolu. (La première barre oblique est syntaxique, tandis que la deuxième barre spécifie le répertoire racine de l'utilisateur distant, comme d'habitude. Pour commencer au répertoire de base, vous le feriez [:port]/~/path/to/file.txt.) [:port]Est facultatif.

Ceci est géré par le plugin standard netrw.vim de vim . Plusieurs autres protocoles sont pris en charge.

FloHimself
la source
6
Oui, le fichier est récupéré dans un fichier temporaire, qui est chargé sur le serveur lors de la sauvegarde.
FloHimself
1
Je vous remercie. Cependant, j'ai eu une erreur, lorsque j'ai essayé de sauvegarder le fichier:E382: Cannot write, 'buftype' option is set
Loom
2
Vous pouvez essayer :set buftype=""​dans vim.
FloHimself
2
De plus, vim lira ~/.ssh/configet résoudra les hôtes distants avec vim scp://[host]/path.
Jangari
2
@stillanoob::e scp://...
FloHimself
6

En fonction de ce que vous voulez dire lorsque vous dites que vous ne possédez pas les droits pour modifier les paramètres de Vim, il peut y avoir un moyen d'utiliser Vim sur le serveur comme vous le souhaitez. Si vous ne pouvez pas changer d'utilisateur .vimrc(parce que vous vous connectez en tant qu'utilisateur partagé, par exemple) mais que vous pouvez toujours créer des fichiers, créez-le en tant que fichier appelé, Loom.vimrcpuis appelez Vim à l'aide du -ucommutateur:

vim -u ~/Loom.vimrc file_to_edit

Vous pouvez même ensuite utiliser un alias: alias vim='vim -u ~/Loom.vimrc'vous permettra d'utiliser Vim de la manière habituelle et chargera votre .vimrcfichier personnalisé . Cet alias ne persistera pas après votre déconnexion, vous n'avez donc pas à craindre que quiconque utilise accidentellement votre Vim personnalisé.

Tom Potts
la source
2

En fonction du nombre de fichiers et du type de fichiers que vous comptez éditer, il ne s'agit peut-être pas exactement de ce que vous souhaitez faire ici, mais je pense que cela mérite d'être mentionné. Si vous devez modifier des fichiers sur un serveur distant, mais souhaitez utiliser tout ce que vous avez sur votre propre poste de travail, vous voudrez peut-être commencer à penser à utiliser un système de contrôle des révisions dans vos machines. De cette façon, vous pouvez modifier vos copies locales sur votre propre ordinateur à l'aide du logiciel de votre choix, valider les modifications, puis simplement mettre à jour les copies locales sur l'ordinateur de destination. Outre la modification des fichiers avec le logiciel avec lequel vous vous sentez à l'aise, vous avez la valeur supplémentaire de disposer d'un historique des modifications apportées à chaque fichier, ce qui est toujours satisfaisant.

Voici une liste de logiciels de contrôle de révision , juste au cas où.

jimm-cl
la source
Suggérez-vous l'utilisation de quelque chose comme engager les modifications dans git, les pousser vers quelque chose comme githubet extraire les modifications de githubvotre machine locale pour y apporter des modifications?
alpha_989
C'est faisable pour des changements de code complexes .. mais pour des changements de code simples peut-être .. ce que @FloHimself ou les shivams mentionnés est plus facile à mettre en oeuvre ..
alpha_989
1

Pour développer M. Potts, répondez: Vous pouvez également faire ce qui précède, puis mettez quelque chose de ce genre dans .bash_profile (ou ce que votre shell utilise):

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

où Loom est votre ID utilisateur d' origine sous lequel vous vous connectez.

Si vous vous connectez en tant que compte partagé (et non en tant que compte individuel, poursuivez immédiatement, alors Von Neuman peut avoir pitié de votre âme, car vous êtes perdu.

J'aurais mis cela dans un commentaire, mais je ne pouvais pas du tout formater le code.

Petro
la source
0

Si vous avez déjà une session vim, utilisez

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

Le :silentdevant supprimera le Press Enter to Continuemessage

et

e scp://user@myserver[:port]//path/to/file.txtest la Excommande de mode pour éditer le fichier remnote.

Testé BitVise SSHDsous Windows 10 et utilisant VIM sous Ubuntu 16.04

alpha_989
la source
Juste une note qui supprime le Press Enter to Continuepour le chargement initial, mais pas pour les suivants:w
Sparhawk