Передача файлов по ssh

  1. Копирование единичных файлов (SCP)
  2. Работа с удаленными директориями (SSHFS)

SCP

Протокол SCP (secure copy) разработан специально для копирования файлов посредством SSH. В linux-системах для операций перемещения существует одноименная утилита scp, входящая в состав openssh.

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

scp $local_path/$backup $login@$host:/$remote_path

где

  • $local_path/$backup — путь и название локального объекта/группы объектов (файлы, папки),
  • $login@$host— логин и адрес удаленной машины (IP или доменное имя),
  • $remote_path — путь на удаленной машине, куда следует положить объекты.

Работает и в обратную сторону. Чтобы забрать архив бэкапа с удаленной машины, можно выполнить:

scp $login@$remote:/$remote_path/$backup $local_path/$backup

Для передачи папок необходимо указывать ключ -r, для подключения к отличному от 22 порта ключ -p.

Такой подход неудобен тем, что для каждой операции необходим ввод пароля для авторизации на удаленной машине. Проблема решаема использованием ssh-ключей вместо обычных паролей, но такой подход не всегда применим. Кроме того, необходимо явное указание объектов для перемещения. Что не всегда удобно (при большом количестве файлов в разных директориях, к примеру). Чтобы просто скопировать несколько файлов с удаленной машины на локальную, в текущую директорию, необходимо сочинить конструкцию вроде:

scp $login@$remote:/$remote_path/\{file1,file2,file3\} .

Note: По умолчанию scp использует при передаче данных алгоритм шифрования Triple-DES. Можно несколько увеличить скорость передачи, включив алгоритм Blowfish, для этого в командной строке следует добавить -c blowfish.

SSHFS

Исправить положение можно, подмонтировав директории удаленной машины на локальную и управлять ими, как при обычной работе с системой. Для этого в linux-системах можно использовать пакет sshfs, основанный на fuse. Работать с ним просто:

  1. Устанавливаем пакет (в Debian/Ubuntu):
    sudo apt-get install sshfs
  2. Создаем точку монтирования на локальной системе, например:
    mkdir /mnt/othercomp
  3. Монтируем необходимую директорию удаленной машины:
    sshfs $login@$host:$remote_path $local_path
  4. После использования отключаем примантированную директорию командой:
    fusermount -u $local_path

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

  • для Windows-семейства можно попробовать DokanSSHFS (для работы необходимо наличие библиотек с того же сайта);
  • под Mac существует проект MacFUSE (и даже графическая оболочка есть);
  • в FreeBSD можно найти порты требуемых пакетов, они расположен здесь: sysutils/fusefs-kmod, sysfsutils/fusefs-libs и sysfsutils/fusefs-sshfs.

Ссылки: