Использование SFTP для безопасного обмена файлами

Что такое SFTP

FTP («File Transfer Protocol», что переводится как «Протокол передачи файлов») – широко используемый метод передачи файлов между двумя удаленными системами.

SFTP расшифровывается как SSH File Transfer Protocol, или Secure File Transfer Protocol («Безопасный протокол передачи файлов»), и является отдельным протоколом, объёдиненным в пакет с SSH и работающим по тому же принципу, но через безопасное соединение.  Преимущество состоит в возможности использовать безопасное соединение для передачи файлов и прослеживать файловую систему как локальной, так и удаленной системы.

В большинстве случаев рекомендуется использовать SFTP, поскольку он основан на функциях безопасности и обладает возможностью комбинировать соединения с SSH. FTP является небезопасным протоколом, использовать который лучше только в ограниченных случаях или в сетях, которым можно доверять.

Хотя SFTP интегрирован во многие графические средства, данное руководство описывает его использование через интерактивный интерфейс командной строки.

Подключение по SFTP

SFTP по умолчанию использует протокол SSH для аутентификации и установки безопасного соединения. Потому можно использовать методы аутентификации SSH.

Хотя пароли установлены по умолчанию и просты в использовании, рекомендуется создать SSH-ключи и передать открытый ключ любой системе, к которой нужно получить доступ. Это гораздо безопаснее и помогает сэкономить время.

Пожалуйста, прочитайте следующее руководство по установке SSH-ключей для того, чтобы получить доступ к серверу, если вы не сделали этого ранее.

Если подключение к серверу при помощи SSH возможно, значит все требования, необходимые для управления файлами через SFTP , были выполнены. Проверьте доступ SSH с помощью следующей команды:

ssh username@IP_или_имя_удаленного_хоста

Если SSH работает, вернитесь назад, введя:

exit

Можно установить соединение SSH и затем открыть сессию SFTP, используя данное соединение при помощи следующей команды:

sftp username@IP_или_имя_удаленного_хоста

После подключения  к удаленной системе стандартная строка будет заменена строкой SFTP.

Получение справки в SFTP

Одна из самых полезных команд, которую следует запомнить в первую очередь – команда помощи. Она предоставляет доступ к справке SFTP. Ее можно вызвать, введя любую из нижеприведенных команд в строку:

help
?

Это откроет список доступных команд:

Available commands:
bye                                Quit sftp
cd path                            Change remote directory to 'path'
chgrp grp path                     Change group of file 'path' to 'grp'
chmod mode path                    Change permissions of file 'path' to 'mode'
chown own path                     Change owner of file 'path' to 'own'
df [-hi] [path]                    Display statistics for current directory or
filesystem containing 'path'
exit                               Quit sftp
get [-Ppr] remote [local]          Download file
help                               Display this help text
lcd path                           Change local directory to 'path'
. . .

Некоторые из приведенных выше команд будут рассмотрены подробнее в следующих разделах.

Навигация с помощью SFTP

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

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

pwd
Remote working directory: /home/demouser

Содержимое текущего каталога удаленной системы можно просмотреть при помощи знакомой команды:

ls
Summary.txt     info.html       temp.txt        testDirectory

Обратите внимание: команды в интерфейсе SFTP не являются стандартными командами оболочки  и не так многофункциональны, но они приводят в исполнение некоторые из  самых важных флагов:

ls -la
drwxr-xr-x    5 demouser   demouser       4096 Aug 13 15:11 .
drwxr-xr-x    3 root     root         4096 Aug 13 15:02 ..
-rw-------    1 demouser   demouser          5 Aug 13 15:04 .bash_history
-rw-r--r--    1 demouser   demouser        220 Aug 13 15:02 .bash_logout
-rw-r--r--    1 demouser   demouser       3486 Aug 13 15:02 .bashrc
drwx------    2 demouser   demouser       4096 Aug 13 15:04 .cache
-rw-r--r--    1 demouser   demouser        675 Aug 13 15:02 .profile
. . .

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

cd testDirectory

Теперь можно пройти через удаленную файловую систему, но что делать, если необходимо получить доступ к локальной файловой системе? Команды можно направить на локальную файловую систему, указав перед ними «l», что значит «local».

Все вышеуказанные команды имеют локальный эквивалент. Можно вывести на экран локальный рабочий каталог:

lpwd
Local working directory: /Users/demouser

Можно просмотреть содержимое текущего каталога локальной машины:

lls
Desktop                                              local.txt                               test.html
Documents                        analysis.rtf

Можно также изменить каталог локальной системы, с которым нужно взаимодействовать:

lcd Desktop

Передача файлов с помощью SFTP

Перемещение по удаленной и локальной файловой системе имеет ограниченную полезность, так как не предоставляет  возможности для передачи файлов между ними.

Передача удаленных файлов на локальную систему

При необходимости загрузить файлы с удаленного хоста можно использовать следующую команду:

get remoteFile
Fetching /home/demouser/remoteFile to remoteFile
/home/demouser/remoteFile                       100%   37KB  36.8KB/s   00:01

Как видите, команда «get» по умолчанию загружает удаленный файл к файлу с таким же именем на локальной системе.

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

get remoteFile localFile

Команда «get» также имеет несколько командных флагов. Например, можно скопировать каталог и все его содержимое, используя рекурсивную команду:

get -r someDirectory

Можно приказать SFTP поддерживать соответствующие права и количество попыток  доступа при помощи флагов «-P» или «-p»:

get -Pr someDirectory

Передача локальных файлов на удаленную систему

Передать файлы на удаленную систему легко при помощи соответствующей команды «put»:

put localFile
Uploading localFile to /home/demouser/localFile
localFile                                     100% 7607     7.4KB/s   00:00

Флаги команды «get» также применимы к команде «put». Таким образом, чтобы скопировать весь локальный каталог, нужно применить:

put -r localDirectory

Команда «df», работающая аналогично командной строке, является популярным инструментом, полезным при загрузке и прересылке файлов. Используя данную команду, можно проверить, достаточно ли места для завершения передачи необходимых файлов:

df -h
Size     Used    Avail   (root)    %Capacity
19.9GB   1016MB   17.9GB   18.9GB           4%

Обратите внимание: локального аналога данной команды нет, но это можно обойти при помощи команды «!».

Команда «!» перемещает в локальную оболочку, в которой можно выполнить любую команду, доступную на локальной системе.  Можно проверить использование дискового пространства, набрав:

!
df -h
Filesystem      Size   Used  Avail Capacity  Mounted on
/dev/disk0s2   595Gi   52Gi  544Gi     9%    /
devfs          181Ki  181Ki    0Bi   100%    /dev
map -hosts       0Bi    0Bi    0Bi   100%    /net
map auto_home    0Bi    0Bi    0Bi   100%    /home

Любая другая локальная команда будет функционировать должным образом. Чтобы вернуться к SFTP сессии, наберите:

exit

Затем вернется строка SFTP.

Простые манипуляции с файлами с помощью SFTP

SFTP выполняет базовую поддержку файлов, что будет полезно при работе с иерархиями файлов.

К примеру, можно изменить владельца файла на удаленной системе с помощью строки:

chown userID file

Обратите внимание: в отличие от системной команды «chmod», аналогичная команда SFTP не принимает имена пользователей, но вместо этого использует уникальные идентификаторы (UID). К сожалению, простого способа узнать уникальный идентификатор из интерфейса SFTP нет.

Это можно обойти, используя:

get /etc/passwd
!less passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
. . .

Обратите внимание: команда «!» используется не самостоятельно, а в качестве префикса к команде локальной оболочки. Это работает также при запуске любой команды, доступной на локальной системе; также это можно было использовать ранее с локальной командой «df».

Уникальный идентификатор будет в третьем столбце файла, на что указывают символы двоеточия.

Аналогичным образом можно изменить группу-владельца файла:

chgrp groupID file

Опять же, простого способа получения списка групп удаленной системы нет. Это можно обойти при помощи следующей команды:

get /etc/group
!less group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
. . .

Третий столбец содержит идентификатор группы, связанной с именем в первом столбце. Это и нужно было найти.

К счастью, команда «chmod» работает на удаленной файловой системе должным образом:

chmod 777 publicFile
Changing mode on /home/demouser/publicFile

Команды для манипулирования правами доступа к локальным файлам нет, но можно установить umask на локальную машину, и тогда любые файлы, скопированные на  локальную систему, будут иметь соответствующие права доступа.

Это можно сделать при помощи команды «lumask»:

lumask 022
Local umask: 022

Теперь все загруженные обычные файлы будут иметь права доступа 644 (при условии, что флаг «-p» не используется).

SFTP  позволяет создавать директории как на локальной, так и на удаленной системе с помощью команд «lmkdir» и «mkdir» соответственно.

Остальные файловые команды применимы только к удаленной файловой системе:

ln
rm
rmdir

Данные команды повторяют основное поведение версий оболочки. Помните, что при необходимости выполнить данные действия на локальной системе можно перейти на нее при помощи команды:

!

Или же выполните в локальной системе единственную команду, используя «!» как префикс, вот так:

!chmod 644 somefile

Завершив сессию SFTP, используйте «exit» или «bye» для закрытия соединения.

bye

Итоги

Несмотря на простоту использования, SFTP очень полезен в администрировании серверов, а также при передаче файлов между ними.

SFTP объединяет в себе сильные стороны FTP и SCP. И хотя существуют ситуации, когда данный протокол неприменим, все же это достаточно гибкий в использовании инструмент, который стоит иметь в своем арсенале.

Tags: , , ,

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