Как мне удаленно редактировать файлы через ssh?

83

Я должен отредактировать некоторые файлы, размещенные на каком-либо сервере, к которому я мог бы обратиться через ssh.

Я бы предпочел отредактировать эти файлы в настроенном vimна моей рабочей станции (у меня нет прав на изменение vimнастроек на удаленном сервере). Иногда я хотел бы отредактировать файл с помощью sublime textдругого графического редактора.

Конечно, я могу загрузить эти файлы, отредактировать их локально и загрузить обратно на сервер. Есть ли более элегантное решение?

маячить
источник

Ответы:

66

Вы можете сделать это, смонтировав удаленную папку как файловую систему, используя 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.

shivams
источник
4
Неудивительно, что на этапе установки произойдет сбой в дистрибутивах, которые не основаны debи, следовательно, не имеют apt-get. (В этом случае yumили zypperможет присутствовать.) Они также требуют root на локальном компьютере, который может или не может быть доступен. (Нельзя сказать, что это плохое решение, но оно имеет большое условие.)
Ульрих Шварц
5
Хорошо. Догадаться. Все это делается на локальной машине. В случае OS X нужно установить osxfuseи sshfs. Их можно установить с помощью homebrew ( 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]Необязательно.

Это обрабатывается стандартным плагином vim для netrw.vim . Поддерживаются несколько других протоколов.

FloHimself
источник
6
Да, файл извлекается во временный файл, который загружается на сервер при сохранении.
FloHimself
1
Спасибо. Тем не менее, я получил ошибку, когда пытался сохранить файл:E382: Cannot write, 'buftype' option is set
Loom
2
Вы можете попробовать :set buftype=""​в 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

В зависимости от того, сколько файлов и какие файлы вы ожидаете отредактировать, возможно, это не совсем то, что вы хотите здесь сделать, но я думаю, что стоит упомянуть. Если вам нужно редактировать файлы на удаленном сервере, но вы хотите использовать все, что у вас есть на вашей рабочей станции, тогда вы можете подумать об использовании какой-либо системы контроля версий на ваших машинах. Таким образом, вы можете изменить свои локальные копии на своем собственном компьютере, используя выбранное программное обеспечение, зафиксировать изменения, а затем просто обновить локальные копии на конечном компьютере. Помимо редактирования файлов любым удобным для вас программным обеспечением, у вас есть дополнительная возможность иметь историю изменений, связанных с каждым файлом, что всегда хорошо.

Вот список программного обеспечения Revision Control , на всякий случай.

Jimm-сл
источник
Вы предлагаете использовать что-то вроде фиксации изменений git, передачи чего- то подобного githubи переноса изменений githubна локальный компьютер, чтобы внести изменения?
alpha_989
Это выполнимо для сложных изменений кода ... но для простых изменений кода возможно ... то, что упомянутое @FloHimself или shivams легче реализовать ..
alpha_989
1

Если продолжить, ответьте на вопрос мистера Поттса: Вы также можете сделать выше, а затем поместить что-то вроде этого в .bash_profile (или что-то, что использует ваша оболочка):

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

где Loom - ваш оригинальный идентификатор пользователя, в который вы входите как.

Если вы входите в систему как общая учетная запись (а не как отдельная учетная запись, то sudo suing), тогда пусть фон Нейман помилует вашу душу, потому что вы потеряны.

Я бы написал это в комментарии, но я никак не мог отформатировать код.

Petro
источник
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

alpha_989
источник
Просто обратите внимание, что это подавляет Press Enter to Continueдля начальной загрузки, но не для каких-либо последующих:w
Sparhawk