Як я можу віддалено редагувати файли через ssh?


82

Мені потрібно редагувати деякі файли, розміщені на якомусь сервері, до якого я міг дістатися через ssh.

Я хотів би відредагувати ці файли в налаштованих vimна моїй робочій станції (я не маю права змінювати vimналаштування на віддаленому сервері). Іноді я хотів би відредагувати файл із sublime textіншим редактором GUI.

Звичайно, я можу завантажувати ці файли, редагувати їх локально та завантажувати їх назад на сервер. Чи є більш елегантне рішення?

Відповіді:


65

Ви можете зробити це, встановивши віддалену папку як файлову систему за допомогою sshfs. Для цього спочатку необхідно виконати декілька попередніх умов:

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

Тепер виконайте процес монтажу:

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

Після цього просто перейдіть у змонтовану папку та використовуйте свій локальний налаштований vim.


4
Не дивно, що етап встановлення не вдасться для дистрибутивів, які не базуються debі, отже, не мають apt-get. (В цьому випадку, yumабо zypperможе бути присутнім.) Вони також вимагають корінь на локальній машині, whcih можуть або не можуть бути недоступні. (Це не означає, що це погане рішення, але воно має велику передумову.)
Ульріх Шварц

4
Добре. Зрозумів це. Все це робиться на локальній машині. У випадку з OS X потрібно встановити osxfuseі sshfs. Вони можуть бути встановлені з доморощеним ( brew install sshfsі brew cask install osxfuse, або з пакетів , отриманих від osxfuse.github.io
inspirednz

95

Це можна зробити scpтак:

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

Зауважте два прорізи //між сервером та контуром, які потрібні для правильного вирішення абсолютного шляху. (Перший косої риски є синтаксичним, а другий косий рисок визначає кореневу директорію віддаленого користувача, як зазвичай. Щоб почати з домашнього каталогу, ви б це зробили [:port]/~/path/to/file.txt.) [:port]Необов’язково.

Це обробляється стандартним плагіном vr 's netrw.vim . Підтримується кілька інших протоколів.


6
Так, файл витягується у тимчасовий файл, який завантажується на сервер при збереженні.
FloHimself

1
Дякую. Однак я отримав помилку, коли намагався зберегти файл:E382: Cannot write, 'buftype' option is set
Loom,

2
Можна спробувати :set buftype=""​in vim.
FloHimself

2
Крім того, vim буде читати ~/.ssh/configта вирішувати віддалені хости за допомогою vim scp://[host]/path.
Джангарі

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

6

Залежно від того, що ви маєте на увазі, коли ви говорите, що не маєте права редагувати налаштування Vim, можливо, існує спосіб використання Vim на сервері так, як ви хочете. Якщо ви не можете змінити свого користувача .vimrc(оскільки, наприклад, ви входите як спільний користувач), але ви все одно можете створити файли, створити його як файл, який називається, скажімо, Loom.vimrcа потім зателефонуйте Vim за допомогою -uперемикача:

vim -u ~/Loom.vimrc file_to_edit

Ви навіть можете використовувати псевдонім: alias vim='vim -u ~/Loom.vimrc'дозволить вам використовувати Vim звичайним способом, і він все одно завантажить ваш спеціальний .vimrcфайл. Цей псевдонім не збережеться після виходу з системи, тому вам не потрібно турбуватися про те, щоб хтось випадково використовував ваш індивідуальний Vim.


2

Залежно від того, скільки файлів і яких файлів ви плануєте редагувати, це, можливо, не саме те, що ви хочете зробити тут, але я думаю, що це варто згадати. Якщо вам потрібно редагувати файли на віддаленому сервері, але ви хочете використовувати все, що є у вас на власній робочій станції, то, можливо, ви захочете почати думати про використання якоїсь системи контролю ревізії у ваших машинах. Таким чином, ви можете змінювати локальні копії на власному апараті за допомогою обраного програмного забезпечення, вносити зміни, а потім просто оновлювати локальні копії на машині призначення. Окрім редагування файлів із будь-яким програмним забезпеченням, з яким ви почуваєтесь комфортно, у вас є додаткова цінність того, що ви маєте історію змін, пов’язаних з кожним файлом, що завжди добре.

Ось перелік програмного забезпечення для контролю за версією , про всяк випадок.


Чи пропонуєте ви скористатися чимось на зразок внесення змін до цього git, підштовхнути його до чогось подібного githubта перетягнути зміни githubна свою локальну машину, щоб внести зміни там?
alpha_989

Це можливо для складних змін коду .. але, можливо, для простих змін коду .. те, що @FloHimself або згадані шиви простіше реалізувати ..
alpha_989

1

Для розширення відповіді містера Потса: Ви також можете зробити вищезазначене, а потім покласти щось подібне у .bash_profile (або все, що використовує ваша оболонка):

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

де Loom - це ваш оригінальний ідентифікатор користувача, у який ви входите як.

Якщо ви входите в систему як спільний акаунт (а не окремий обліковий запис, то судовий, то може, фон Нейман помилується над вашою душею, бо ви загубитесь.

Я б написав це в коментарі, але я не зміг отримати формат коду взагалі.


0

Якщо у вас вже запущені сеанси vim

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

:silentСпереду буде придушити Press Enter to Continueповідомлення

і

e scp://user@myserver[:port]//path/to/file.txtце команда Exрежиму для редагування файлу примітки.

Тестовано під BitVise SSHDкеруванням в ОС Windows 10 та використанням VIM-програми на Ubuntu 16.04


Лише зауважте, що це пригнічує значення Press Enter to Continueдля початкового завантаження, але не для наступного:w
Sparhawk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.