Как копировать файлы по сети?

Примерно год назад я уже поднимал эту тему в публикации Как копировать файлы?

Вчера я зашел на сайт Линукс по-русски и прочитал статью про еще один простой способ подключения к удаленному директорию:

http://rus-linux.net/MyLDP/file-sys/sshfs.html

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

sshfs (Secure SHell FileSystem) — это файловая система, которая основана на безопасном сетевом протоколе ssh. Суть sshfs в том, что вы управляете удаленными файлами и директориями, точно так же как будто они находятся на вашем компьютере. В своей работе клиент sshfs опирается на модуль FUSE (Filesystem in Userspace — Файловая система в пользовательском пространстве).

Однако, давайте перейдём ближе к делу! А тот, кому хочется погрузиться в эти технологии еще глубже, может и сам полистать Интеренет.

Поскольку большинство ssh-серверов изначально поддерживают  протокол sshfs, то на стороне сервера делать вообще ничего не нужно. В противном случае, если вы до этого момента на удаленном компе не поднимали ssh-сервер, то выполните установку модуля:

$ sudo apt-get install openssh-server

В результате в систему установится этот пакет и будет «поднят» ssh-север.

На стороне клиента (то есть на вашем рабочем компе) нужно установить пакет sshfs:

$ sudo apt-get install sshfs

Всё, с установкой пакетов закончили. Теперь перейдем к расчистке взлетно-посадочной полосы.

Удаленный директорий (директорий, находящийся на другом компе) можно примонтировать к любому директорию в вашем домашнем директории. Когда удаленный директорий примонтирован, обращение к нему будет выглядеть точно так, как будто всё его содержимое находится на винчестере внутри вашего компа. Об этом я уже говорил.

Наша текущая задача — придумать такое название этому директорию, которое бы однозначно отражало его смысл. Мне это проще сделать на собственном примере.

Итак, у меня есть сервер и рабочий комп, которые имеют имена eee и p24 соответственно. (Я сторонник идеи наделять компы коротким именами, а также давать короткие имена пользователям.) На том и на другом компе у меня есть мои учетные записи, которые имеют одинаковое имя — alex. Таким образом, мой домашний директорий и там, и там будет иметь одинаковый путь — /home/alex.

Кроме того, в домашней сетке у меня могут появляться и другие компы, например, turion, rover, sveta и другие.

Теперь давайте вспомним, что оболочка (bash) имеет переменные окружения. Нас интересуют переменные $HOME и $USER. С помощью команды echo мы можем посмотреть их значения

home-user

Для монтирования удаленных директориев я в своем домашнем директории создал специальный поддиректорий nfs.

$ cd && mkdir -p nfs/{eee,rover,sveta}

Первая команда cd без аргументов переместит вас в самый верх домашнего директория. Вторая команда (после &&) создаст директорий nfs и создаст в нем сразу еще три поддиректория:

mkdir-nfs

Таким образом, для каждого удаленного компа есть его законное место для «парковки».

Да! Чуть-чуть не забыл сообщить, что все компы, конечно, имеют свои имена, но вот обращаются они по сети друг к другу не по именам, а по IP-адресам.

В каждой системе есть специальный файлик, который транслирует «человеческое» имя компа в IP-адрес. Этот файл находится в директории /etc и называется hosts. Вам нужно его отредактровать на свой лад, согласно вашей сетке. Введите в консоли команду:

$ sudo nano /etc/hosts

и по окончании редактирования нажмите сначала на F3 (сохранить файл), а потом на F2 (выйти из редактора).

Либо, находясь в графической оболочке, нажмите Alt-F2. Появится окно «Выполнить программу». Затем введите команду gksu gedit /etc/hosts

gksu-gedit

Вот, как пример, содержимое моего файла:

127.0.0.1	localhost
127.0.1.1	p24

192.168.1.12    turion
192.168.1.13    eee
192.168.1.14    p24
192.168.1.15	rover
192.168.1.16	s18
192.168.1.17	rpi
192.168.1.20    rimma
192.168.1.30    ball
192.168.1.40    s2

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

В общем, сейчас, когда вы поставили в соответствие IP-адресам очеловеченные имена хостов, вы может обращаться к ним по именам.

Итак, на данный момент у нас всё готово к приёму и отправке бортов (самолётов).

Допустим, теперь мне захотелось подключиться к компу eee PC. Переводя с языка Виндовс-пользователя на язык Линукс-пользователя я должен примонтировать удаленный директорий. Я это сделаю следующей командой:

$ sshfs $USER@eee:$HOME $HOME/nfs/eee

здесь:
sshfs — собственно, команда

$USER@eee:$HOME — ресурс, который мы монтируем. Заменив $USER и $HOME на alex и /home/alex, мы получим alex@eee:/home/alex. Конструкция alex@eee должна быть вам знакома по «почтовым делам». Только вместо почтового сервера (yandex.ru, mail.ru, gmail.com) стоит имя вашего ssh-сервера. Двоеточие (‘:’) в строке отделяет имя пользователя и имя компа от директория, который мы хотим примонтировать в нашу систему. Вроде разобрались?

$HOME/nfs/eee — а это то место, куда прибудет «борт», то есть место на нашем локальном компе, куда будет примонтирован удаленный директорий.

Думаю, что не так уж это и сложно. С непривычки оно может показаться какой-то страшной магией, но, уверяю вас, все очень и очень просто!

В общем, после монтирования удаленного директория я могу работать с ним (с его файлами и поддиректориями) так, как будто всё это хозяйство находится на моем локальном компе. Как вы наверно уже поняли, если удаленный комп находится где-нибудь в Канаде и имеет «белый» сетевой адрес, то даже и в этом случае вы не заметите существенной разницы, ну разве что только чуть медленнее будут происходить чтения и сохранения.

После работы с удаленным директорием, его лучше отмонтировать. Хотя если в лом, то можно это и не делать — при выключении система сама все отмонтирует.

Для отмонтирования существует специальная команда:

$ fusermount -u $HOME/nfs/eee

Также можно отмонтирвать традиционно — командой umount:

$ sudo umount $HOME/nfs/eee

, но в этом случае вам придётся вводить пароль.

Вот, это пожалуй всё, что я хотел сказать по поводу доступа к удаленныи файлам и директоиям.

Для лентяев, которым невмоготу набирать консольные команды руками я могу предложить сделать кнопки запуска:

make-run-button

и разместить их на панелях (перетянуть их туда мышкой):

moun-eeePC

Если заметили, то в окне кнопки запуска я не использовал переменные окружения. Я не знаю почему, но кнопка запуска не желает расшифровывать переменные окружения. В результате чего обращение к удаленному компу идет не с именем рользователя alex, а с именем пользователя $USER, то есть ищется именно такое имя.

Ну вот, теперь точно — всё!

Реклама

8 responses to “Как копировать файлы по сети?

  1. У вас ошибка:
    $ cd && mkfs -p nfs/{eee,rover,sveta}
    Должно быть:
    $ cd && mkdir -p nfs/{eee,rover,sveta}

  2. Если я правильно понимаю, это же самое тунеллирование, вид сбоку.

    • Я не совсем понимаю слово «тунеллирование» в Вашем комменте, но, думаю, что можно и так сказать — проложен туннель файловой системы через ssh-соединение.

  3. Для полного счастья всё это хозяйство надо перевести на ключи и тогда монтирование через sshfs и работа с ssh будет идти без запроса паролей. Удобно.

    Ещё есть более простой способ для копирования файлов между машинами, но менее защищённый. Для дома подойдёт. Это связка NFS + AutoFS.

  4. Я по старинке поднимаю ftp на сервере, для безопасности — только 1 пользователь, ftp-сервер сам гасится через определенное время если забуду выключить. Дома между машинами конечно NFS.
    А как у sshfs со скоростью?

    • Со скоростью чуть похуже, чем у FTP/NFS, но преимущество именно в защищённости канала.

    • Как-то не интересовался вопросом. Меня устраивало.

      Сейчас провел натурный эксперимент:

      1. Копирование файла размером 1.5 ГБ с флешки на нетбук (Asus eee PC) — 96 сек.

      2. Копирпование этого же файла с этого же нет-бука на стационарный рабочий комп (Cel.1.8 GHz, одно ядро) через свитч (100 Мбит-ный) — 140 сек.

      Меня не напрягает время копирование файлов по сети. Меня напрягает копирование файлов через флеш-стик (флешку). Когда копируется несколько файлов, обязательно какой-нибудь да забудешь. И как дурак потом бегаешь из комнаты в комнату с флешкой. А еще весело получается, если на компе работает человек (допустим, дочь пишет отчет по лабе), и ты просишь её прерваться, чтобы переключить рабочий стол, найти файлы, скнуть их на флеху, не забыть безопасно отмонтировать… и т.д. и т.п. А потом еще раз прерваться, потому что нужен еще один файлик… Ну, думаю, проблема понятна.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s