Jak mogę zdalnie edytować pliki przez ssh?


82

Muszę edytować niektóre pliki umieszczone na serwerze, do którego mogę uzyskać dostęp za pośrednictwem ssh.

Wolę edytować te pliki w niestandardowych ustawieniach vimna mojej stacji roboczej (nie mam uprawnień do zmiany vimustawień na zdalnym serwerze). Czasami chciałbym edytować plik za pomocą sublime textlub innego edytora GUI.

Oczywiście mogę pobrać te pliki, edytować je lokalnie i przesłać z powrotem na serwer. Czy istnieje bardziej eleganckie rozwiązanie?

Odpowiedzi:


65

Możesz to zrobić, instalując folder zdalny jako system plików za pomocą sshfs. Aby to zrobić, najpierw wykonaj kilka wstępnych wymagań:

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

Teraz wykonaj proces montażu:

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

Następnie przejdź do zamontowanego folderu i użyj własnego lokalnego vima.


4
Nie jest zaskoczeniem, że krok instalacji zakończy się niepowodzeniem w przypadku dystrybucji, które nie są deboparte, a zatem nie mają apt-get. (W takim przypadku yumlub zyppermoże być obecny.) Wymagają również rootowania na lokalnej maszynie, które mogą być niedostępne. (Nie oznacza to, że jest to złe rozwiązanie, ale wiąże się z dużą koniecznością).
Ulrich Schwarz

4
W porządku. Domyśliłam się. Wszystko to odbywa się na komputerze lokalnym. W przypadku OS X należy zainstalować osxfusei sshfs. Mogą one być instalowane z homebrew ( brew install sshfsi brew cask install osxfuse, lub opakowań otrzymanych z osxfuse.github.io
inspirednz

95

Możesz to zrobić w scpnastępujący sposób:

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

Zwróć uwagę na dwa ukośniki //między serwerem a ścieżką, które są potrzebne do prawidłowego rozwiązania ścieżki bezwzględnej. (Pierwszy ukośnik jest składniowy, podczas gdy drugi ukośnik określa katalog główny użytkownika zdalnego, jak zwykle. Aby rozpocząć od katalogu domowego, należy [:port]/~/path/to/file.txt.) [:port]Jest opcjonalny.

Jest to obsługiwane przez standardową wtyczkę netrw.vim vima . Obsługiwanych jest kilka innych protokołów.


6
Tak, plik jest pobierany do pliku tymczasowego, który jest zapisywany na serwerze podczas zapisywania.
FloHimself

1
Dziękuję Ci. Mam jednak błąd podczas próby zapisania pliku:E382: Cannot write, 'buftype' option is set
Krosno

2
Możesz spróbować :set buftype=""​w vimie.
FloHimself

2
Ponadto vim odczyta ~/.ssh/configi rozwiąże zdalne hosty za pomocą vim scp://[host]/path.
Jangari,

2
@stillanoob::e scp://...
FloHimself

6

W zależności od tego, co masz na myśli, mówiąc, że nie masz uprawnień do edytowania ustawień Vima, może istnieć sposób użycia Vima na serwerze tak, jak chcesz. Jeśli nie możesz zmienić użytkownika .vimrc(na przykład logujesz się jako użytkownik udostępniony), ale nadal możesz tworzyć pliki, utwórz go jako plik o nazwie powiedzmy, Loom.vimrca następnie wywołaj Vima za pomocą -uprzełącznika:

vim -u ~/Loom.vimrc file_to_edit

Możesz nawet użyć aliasu: alias vim='vim -u ~/Loom.vimrc'pozwoli ci używać Vima w zwykły sposób i nadal ładuje twój .vimrcplik niestandardowy . Ten alias nie będzie się utrzymywał po wylogowaniu, więc nie musisz się martwić, że ktoś przypadkowo użyje Twojego niestandardowego Vima.


2

W zależności od liczby plików i rodzaju plików, które chcesz edytować, być może nie jest to dokładnie to, co chcesz tutaj zrobić, ale myślę, że warto o tym wspomnieć. Jeśli musisz edytować pliki na zdalnym serwerze, ale chcesz korzystać ze wszystkiego, co masz na własnym stanowisku roboczym, możesz zacząć myśleć o użyciu jakiegoś systemu kontroli wersji na swoich komputerach. W ten sposób możesz modyfikować lokalne kopie na własnym komputerze za pomocą wybranego oprogramowania, zatwierdzać zmiany, a następnie po prostu aktualizować lokalne kopie na maszynie docelowej. Oprócz edycji plików za pomocą dowolnego oprogramowania, z którym czujesz się komfortowo, masz dodatkową wartość posiadania historii zmian związanych z każdym plikiem, co zawsze jest dobre.

Oto lista oprogramowania do kontroli wersji , na wszelki wypadek.


Czy sugerujesz użycie czegoś takiego jak zatwierdzenie zmian git, popchnięcie do czegoś takiego githubi przeniesienie zmian z githubkomputera lokalnego, aby wprowadzić tam zmiany?
alpha_989

Jest to wykonalne w przypadku złożonych zmian kodu ... ale może w przypadku prostych zmian kodu ... to, o czym wspomniał @FloHimself lub shivams, jest łatwiejsze do wdrożenia.
alpha_989

1

Aby rozwinąć odpowiedź Pana Pottsa: Możesz również zrobić powyższe, a następnie umieścić coś takiego w .bash_profile (lub cokolwiek, czego używa twoja powłoka):

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

gdzie Loom jest Twoim pierwotnym identyfikatorem użytkownika, na który się logujesz.

Jeśli logujesz się jako konto wspólne (a nie konto indywidualne, a następnie sudo), Von Neuman może zlitować się nad twoją duszą, ponieważ jesteś zgubiony.

Umieściłbym to w komentarzu, ale nie mogłem w ogóle sformatować kodu.


0

Jeśli masz już uruchomione sesje vim, użyj

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

Z :silentprzodu ukrywa Press Enter to Continuewiadomość

i

e scp://user@myserver[:port]//path/to/file.txtto Expolecenie trybu służące do edycji pliku komentarza.

Testowany z BitVise SSHDsystemem Windows 10 i systemem VIM z systemem Ubuntu 16.04


Tylko uwaga, że ​​pomija to Press Enter to Continuepoczątkowe ładowanie, ale nie kolejne:w
Sparhawk
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.