Что такое 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. И хотя существуют ситуации, когда данный протокол неприменим, все же это достаточно гибкий в использовании инструмент, который стоит иметь в своем арсенале.