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

Источник: https://blog.xsk.in/it/peredacha-fajlov-po-ssh/324/
Опубликовано: 2013-08-29 · Рубрики: IT


1. [Копирование единичных файлов (SCP)](/it/peredacha-fajlov-po-ssh/324/#scp)
2. [Работа с удаленными директориями (SSHFS)](/it/peredacha-fajlov-po-ssh/324/#sshfs)

## <a name="scp"></a>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***.

## <a name="sshfs"></a>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](http://dokan-dev.net/en/download/)(для работы необходимо наличие библиотек с того же сайта);

- под Mac существует проект [MacFUSE](http://code.google.com/p/macfuse/downloads/list) (и даже графическая [оболочка](http://code.google.com/p/sshfs-gui/downloads/list) есть);

- в FreeBSD можно найти порты требуемых пакетов, они расположен здесь: sysutils/fusefs-kmod, sysfsutils/fusefs-libs и sysfsutils/fusefs-sshfs.

*Ссылки:*

- [http://ru.wikipedia.org/wiki/SCP](http://ru.wikipedia.org/wiki/SCP)
- [http://www.manual.ru/articles/Как\_с\_помощью\_scp\_скопировать\_файл\_или\_директорию](http://www.manual.ru/articles/Как_с_помощью_scp_скопировать_файл_или_директорию)
- [http://software.intel.com/ru-ru/articles/mounting-remote-directory-over-ssh-and-sftp](http://software.intel.com/ru-ru/articles/mounting-remote-directory-over-ssh-and-sftp)

