Если необходимо работать с кодом на удаленном сервере то можно пойти несколькими путями:
- FTP – качает tmp файл, редактирует и закачивает обратно на лету. Можно использовать редактор с подсветкой.
- Зайти по ssh и пользоваться консольными редакторами nano, vim и др, а так же mc. Необходимо постоянно вводить пароль, достает.
- Примонтировать файловую систему через FTP или SSH. В этом случае получим как будто папку в нашей файловой системе типа /mnt/server и тогда возможно использовать IDE с доступом ко всему проекту сразу.
Сейчас рассмотрим третий вариант. Монтирование по FTP осуществляется в Ubuntu с помощью пакета curlftpfs. Однако подключение будет очень медленным, отрывать большие проекты в IDE будет практически невозможно. Монтирование по ssh не смотря на шифрование поддерживает скорость 200-250кб.
Для начало надо установить пакет sshfs.
1 2 3 |
sudo apt-get install sshfs |
Следующие действия уже выполнять не нужно, они выполняются автоматически, но все же приведу пример. Возможно нужно будет перезагрузиться.
1 2 3 4 5 6 7 8 |
# Загрузка модуля sudo modprobe fuse # Настройка прав доступа sudo adduser username fuse sudo chown root:fuse /dev/fuse |
Пример использования sshfs
1 2 3 4 |
mkdir ~/mnt/server sshfs username@host:/remotepath ~/mnt/server |
Чтобы отмонтировать
1 2 3 |
umount ~/mnt/server |
И вот в момент подключения будет запрошен пароль. Открытая сессия будет сохраняться до перезагрузки или завершения сеанса, т.е. не надо будет восстанавливать сессию как с ssh после перерыва в работе. Но когда работаешь с сервером каждый день, то подключаться каждый раз перед работой тоже надоедает. Стоит сделать автоматическое монтирование по sshfs.
Для начала генерируем открытый и закрытый ключ.
1 2 3 |
ssh-keygen -t rsa |
На все вопросы генерации жмем Enter, пароль вводить не надо. В итоге будут созданы ключи в ~/.ssh директории.
id_rsa – закрытый ключ, должен быть секретным и никому не виден.
id_rsa.pub – открытый, его и будем использовать для входа без пароля.
Все, что остается сделать, это записать открытый ключ в файл .ssh/authorized_keys на сервере для нужного пользователя. Если для root то /root/.ssh/ иначе в /home/user/.ssh
Способ первый длинный:
Копируем открытый ключ на сервер. Выполняется на клиентской машине.
1 2 3 |
scp .ssh/id_rsa.pub @:/home/user/.ssh |
Копируем ключ в нужный файл. Выполняется на сервере.
1 2 3 |
cat id_rsa.pub >> authorized_keys |
Способ второй короткий:
Копируем с клиентской машины ключ сразу куда надо на сервер.
1 2 3 |
ssh-copy-id -i ~/.ssh/id_rsa.pub @ |
Та-да! Теперь еще можно выставить права на чтение на сервере:
1 2 3 |
chmod 0700 ~/.ssh |
Пробуем зайти по ssh.
1 2 3 |
ssh user@server.com |
Если вход произошел успешно и главное без ввода пароля, то полдела уже сделано. Теперь задействуем установленный ранее sshfs. Но сделаем это хитро. Создадим bash скрипт и добавим его в автозагрузку.
1 2 3 4 |
#!/bin/sh sshfs @:/home/user /mnt/server |
Тут например монтируем домашнюю удаленную папку в папку server на локальной машине.
Меняем права на выполнение для файла
1 2 3 4 5 |
chmod +x name.sh #или chmod 777 name.sh |
В автозагрузку можно добавить просто команду или переместить этот файл в /etc/init.d/ или создать правило в cron с меткой @reboot.
Теперь при каждой перезагрузке файловая система будет монтироваться автоматически по sshfs и не надо вводить пароль!
Можно сделать автоматическое монтирование и без rsa ключей. Для этого надо добавить в автозагрузку команду:
1 2 3 |
echo 'password' | sshfs root@server.com:/srv /home/user/mnt/server/ -o password_stdin |
Пароль берется автоматически из стандартного потока ввода-вывода.
Возможные проблемы.
1. Agent admitted failure to sign using the key.Permission denied (publickey).
Означает, что сгенерированный rsa ключ не установлен в системе, не привязан. Для привязки надо выполнить:
1 2 3 |
ssh-add ~/.ssh/id_rsa |
2. Что если не вышло выполнить команду из пункта 1 и выдалась ошибка
Could not open a connection to your authentication agent
Надо выполнить сначала
1 2 3 |
ssh-agent /bin/bash |
И уже после ssh-add из пункта 1.