Обмен файлами на двух машинах

By Igor

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

Итак, проблема поставлена. Осталось найти пути её решения.
Решений, как обычно, несколько. О некоторых из них я расскажу. По причине работы в последнее время исключительно под ArchLinux, рассказ будет вестись об этом дистрибутиве (настройка NFS под Slackware в целом такая же)

NFS
для настройки NFS в ArchLinux необходимо поставить пакет nfs-utils с зависимостями (portmap). Запуск демона следует производить в следующем порядке: вначале portmap, потом nfslock, а потом nfsd (или в указанном порядке вписать их в список стартующих автоматически демонов в файле /etc/rc.conf). Это важно. Файл настроек именно NFS в общем-то один, /etc/exports. Подробно про него можно узнать по адресу man exports. Вот мой файл на лаптопе:
/home/ftp 192.168.2.1(rw,async,no_root_squash,subtree_check)
В конце man exports есть несколько примеров.
Теперь задача состоит в разрешении удалённому пользователю (например, на сервере) использовать демоны на локальной машине (соответственно, на лаптопе). Если есть атмосфера полного доверия =), то в файл /etc/hosts.allow можно вписать
ALL:192.168.2.1 #server IP address
Иначе следует вписать в файл разрешение на запуск конкретных демонов:
portmap:192.168.2.1
lockd:192.168.2.1
rquotad:192.168.2.1
mountd:192.168.2.1
statd:192.168.2.1

Теперь уже дело техники. Создаём каталог /home/server, добавляем запись в /etc/fstab:
192.168.2.1:/home/ftp /home/server nfs noauto,user 0 0
После этого уже можно подмонтировать:
mount /home/server

FISH
Я недавно узнал об этом способе и мне, как большому любителю Konqueror, этот способ очень понравился. Надо установить ssh (а всякий раз, когда имеешь дело с двумя собственными компьютерами, установленный ssh – это очень удобно), то есть в ArchLinux просто установить пакет openssh. Теперь нужно добавить sshd в список разрешённых к запуску демонов так, как указано выше. Теперь в konqueror просто набираем fish://username:password@192.168.2.1 для доступа к серверу (если ввести просто fish://192.168.2.1, то у меня появляется пользователь cheer, наверное, потому что на лаптопе мой username как раз cheer)
Кажется, это самый простой способ доступа к файлам в локальной сети, минимум настроек. Существует проблема с кириллицей, если забыть про то, что можно выставлять кодировку для удалённых страниц в konqueror. Так что Tools->Select Remote Charset избавит ото всех проблем с отображением русских букв.

SHFS

SHFS требуется установить и настроить только на стороне клиента. На сервере требуется лишь запущенный sshd. В ArchLinux требуется установить shfs для вашего ядра (у меня suspend2, поэтому pacman -S shfs-suspend2) и запустить sshd на сервере. Для sshd надо опять же сделать запись в /etc/hosts.allow

При установке пакета pacman заботливо пишет:
>>> If you want to allow non-root users to mount shfs shares, you have to set
>>> suid attribute on shfsmount/shfsumount (chmod u+s).

Сие в переводе означает, что если вы хотите, чтобы обычные пользователи могли монтировать удалённые директории, надо установить suid биты на /usr/bin/shfsmount и /usr/bin/shfsumount. Это легко выполняется с помощью команд:

#chmod u+s /usr/bin/shfsmount
#chmod u+s /usr/bin/shfsumount

теперь права стали: -rwsr-xr-x root root.

Теперь можно добавить запись в /etc/fstab вида:
username@192.168.2.1:/home/ftp /home/server shfs rw,user,noauto 0 0

После введения пароля удалённый каталог окажется смонтированным.

Итоги
Мне больше всего понравился доступ по fish://, shfs – не очень, так периодически удалённый каталог отрубался. Возможно, виною мои кривые руки. NFS я пользовался достаточно давно, удобная вещь :), но для моих целей больше всего подходит именно fish.

Полезные ссылки

  • NFS на OpenBSD
  • SHFS на ArchWiki
  • 18 коммент. на “Обмен файлами на двух машинах”

    1. serhiy:

      В некоторых случаях можно использовать FTP. Кому что больше нравится. На счет обзора, то мне тоже FISH понравился, но есть один вопрос. Неужели нельзя обойтись без ввода пароля прямым текстом в строке браузера? После этого, пароль так и светится в кеше. Я не знаю точно принципа работы этого протокола. У меня был уже настроен SSH с доступом по ключам. Поэтому, набрав в браузере лишь IP:порт я без проблем зашел.

    2. Igor:

      ну да, я хотел про FTP написать, но потом понял, что в сети этого навалом и писать не стал :)
      Можно пароль не вводить, тогда вывалится окно с просьбой его ввести. Или использовать ssh ключи. Но с последним я ещё не разбирался.
      ssh ключи на ArchWiki

    3. Dmitry:

      Про NFS – нужно быть внимательным /etc/exports синтаксис в этом файле значительно отличается для линксов и bsd.

    4. Ivan A-R:

      Касательно автоматизации поставленной задачи ;-)

      Я для того что бы делать бэкап своего сайта на локальную машину пользуюсь rsync. Работает он поверх ssh

      Выглядит это примерно вот так.
      rsync -arvzu –delete –exclude “*/data/cache/*/*” user@host:~/public_html/dir-to-backup .

      Возможностей у rsync выше крыши, так что можно настроить под свою задачу.

      Кстати, rsync прекрасно синхронизирует и локальные папки. Умел бы он ещё ftp, цены бы ему не было =)

    5. Igor:

      http://wiki.archlinux.org/index.php/Sync_laptop_desktop
      там есть небольшой рассказ про три приложения: unison, caveats и rdiff-backup
      Но, судя по всему, они тоже ftp не поддерживают…

    6. virens:

      Про NFS познавательно, всё хочу его поднять, до лениво. Надо будет побороть это в себе и таки пощупать NFS :-)

    7. Dmitry:

      http://wiki.archlinux.org/index.php/Sync_laptop_desktop – я что-то себе представить не могу зачем нужно настолько глубоко синхронизировать лаптоп и десктоп, если они работают, именно работают, а не интернет смотрят, то каждый нужно будет настраивать отдельно, удобнее держать все нужные данные и документы где-то в одном месте и по ssh или nfs их оттуда забирать и место экономится и все сразу синхронизировано в одном месте, примонтировал серверный экспорт и делай с ним что хочешь на внутрисетевых скоростях… другая проблема, что основной компутер может быть не включен, тогда можно будет сохранять информацию на локальной фс, а потом отсылать на основной компутер. И что характерно с минимальными затратами – нужен запущенный portmap и mountd :)

    8. Igor:

      Может, человеку синхронизироваться нравится… В чём-то я его прекрасно понимаю…
      Я так и делаю, сборище пакетов для ArchLinux храню в одном месте (на лаптопе), периодически подключаю разнообразные машины к лаптопу и скидываю на них пакеты (ну да, знаю, что есть rucksack, ещё что-то, но пока и без них обхожусь). И синхронизация была бы очень удобной (опять же пока не до неё).
      Хотя, насколько я понял, товарищ по ссылке чуть ли не /etc синхронизирует =)

    9. borey:

      SCP по моему самый удобный способ. SSH поднят практически везде. У нас на работе он основной и что то более удобное придумать сложно.
      Пользовать его можно как и в коммандной строке так и в GUI (Nautilus поддерживает, Konqueror не знаю, но наверно тоже)

    10. Igor:

      fish в Konqueror’е – это и есть SCP, если я правильно понимаю. sftp, кстати, в Konqueror’е тоже есть…

    11. Igor:

      Вот ещё хорошее, подробное руководство на русском:
      http://www.rhd.ru/docs/manuals/enterprise/RHEL-4-Manual/sysadmin-guide/s1-openssh-client-config.html
      А раньше ещё был telnet, но, кажется, из-за проблем с безопасностью он в настоящее время практически не используется.

    12. Dmitry:

      для OpenBSD есть OpenSSH – нужно будет разобраться…

    13. Igor:

      Так а это же одно и тоже, разве нет?

    14. Ivan A-R:

      Igor, телнет просто совершенно тупая штука, которая коннектится к определённому порту и показывает принятые данные, а с клавиатуры туда передаёт… Всё идёт открытым текстом. Я его, кстати, активно использую для тестирования разных сервисов =)

    15. serhiy:

      для OpenBSD есть OpenSSH – нужно будет разобраться…

      OpenSSH был создан командой OpenBSD как альтернатива SSH, который все еще является закрытым ПО. Когда говорят о SSH в Linux, то скорей всего подразумевают именно OpenSSH.

    16. Eugen:

      “Теперь в konqueror просто набираем fish://username:password@192.168.2.1 для доступа к серверу” – можно набрать без :пароля, что-бы не светить его, система его спросит сама

    17. Дополнительные возможности Konqueror « linux in cheer’s eyes:

      [...] linux in cheer’s eyes linux and IT « Обмен файлами на двух машинах [...]

    18. antox:

      “… shfs – не очень, так периодически удалённый каталог отрубался.”
      Наверно, помогло бы указание в fstab опции persistent:
      “username@192.168.2.1:/home/ftp /home/server shfs rw,user,noauto,persistent 0 0″

    Коментарии отменены.