RE:NODE

Эксплуатация11 мин чтения

GUI-клиенты S3: настройка Cyberduck, WinSCP и S3 Browser

Подключение Cyberduck, WinSCP и S3 Browser к S3-совместимому endpoint: настройки path-style, HTTP или HTTPS, ключи и ошибки, которые показывает каждый клиент, если что-то не так.

0 прочтений

Чтобы просматривать S3-совместимый бакет мышкой, используйте Cyberduck на Windows или macOS, WinSCP или S3 Browser на Windows и дайте каждому из них одни и те же четыре вещи: имя хоста endpoint, ключ доступа, секретный ключ и path-style адресацию. Последнее - то, что ломается молча. Все три клиента по умолчанию предполагают virtual-hosted style от Amazon, помещают имя бакета в имя хоста, а затем сообщают о расплывчатой ошибке соединения или «cannot read container». В Cyberduck это исправляется профилем подключения «S3 (Deprecated path style requests)», в WinSCP - установкой URL style в Path, в S3 Browser - выбором path style в модели адресации. В этой статье разобраны точные настройки каждого клиента, что делать с обычным HTTP и с HTTPS и чем S3 отличается от папок SFTP, ради которых эти программы изначально создавались.

Какой клиент выбрать#

КлиентПлатформыЦенаЧем хорош
CyberduckWindows, macOSБесплатно (пожертвования)Чистый интерфейс, закладки, работает со многими бэкендами
WinSCPWindowsБесплатно, открытый кодУ многих уже установлен; скрипты; синхронизация
S3 BrowserWindowsБесплатно для личного использования, платный ProФункции именно для S3, подробные настройки
Mountain DuckWindows, macOSПлатноПодключает бакет как букву диска или том
rclone mountWindows, macOS, LinuxБесплатно, открытый кодДиск из командной строки, скрипты

Если вам нужно лишь время от времени перетаскивать файлы туда и обратно, Cyberduck доставит меньше всего хлопот и ведёт себя одинаково на обеих системах. Если вы уже пользуетесь WinSCP для SFTP, добавив в него сайт S3, вы получите одну программу на всё. S3 Browser выносит в меню больше возможностей API S3, чем два других, и именно к нему тянутся пользователи Windows, когда хотят посмотреть заголовки и метаданные объектов. Mountain Duck (от авторов Cyberduck) и rclone mount превращают бакет в нечто похожее на диск - это удобно, но с оговорками, о которых ниже.

Настройки, которые нужны любому клиенту#

Соберите их, прежде чем открывать какую-либо программу:

НастройкаПримерОткуда берётся
Хост endpoints3.example.comИмя хоста, которое вы направили на хранилище, или голый адрес
Порт443 для HTTPSProxy-слот или порт с обычным HTTP для голого адреса
ID ключа доступаAKIA...Создаётся для сервера, показывается в панели
Секретный ключ доступа40 символовТам же; обращайтесь с ним как с паролем
АдресацияPath-styleТребуется большинству S3-совместимых endpoint
Регионus-east-1Любое значение, если провайдер принимает любое

В хранилище S3 у RE:NODE ключ доступа, секретный ключ и первый бакет создаются вместе с сервером и показываются в панели. Endpoint отвечает по обычному HTTP на своём порту, а proxy-слот тарифа даёт HTTPS: направьте имя хоста, например s3.example.com, на показанный адрес, сертификат будет выпущен и продлеваться за вас, а клиенты будут подключаться на порт 443. Используйте HTTPS-имя во всех GUI-клиентах. Обычный HTTP работает, но передаёт ваши файлы и каждый запрос в открытом виде, так что оставьте его для быстрой проверки в сети, которой доверяете. Как направить имя хоста, объясняет статья ваш домен и его сертификат.

Cyberduck#

В Cyberduck есть тип подключения «Amazon S3», заточенный под AWS и использующий virtual-hosted запросы. Для path-style endpoint нужно установить профиль подключения - небольшой файл, который объясняет Cyberduck, как общаться с сервером определённого типа.

  1. Откройте Preferences, затем Profiles.
  2. Найдите «path style» и отметьте S3 (Deprecated path style requests). Слово «deprecated» отражает отношение Amazon к path-style; для S3-совместимого endpoint это правильный выбор.
  3. Если для проверки нужен обычный HTTP, отметьте также S3 (HTTP). Комбинированного профиля с обычным HTTP и path-style в стандартном списке нет - ещё одна причина использовать HTTPS-имя.
  4. Нажмите Open Connection (или создайте закладку) и выберите path-style профиль в выпадающем списке протоколов.
  5. Заполните Server s3.example.com, Port 443, а также Access Key ID и Secret Access Key из панели.
  6. Подключитесь. Вы должны увидеть свои бакеты в виде папок верхнего уровня.

У Cyberduck есть и скрытая настройка s3.bucket.virtualhost.disable, которая при значении true глобально отключает virtual-hosted запросы. Профиль - более чистый путь, потому что он влияет только на использующие его закладки, и ваши закладки для AWS продолжат работать.

Если выданный вам ключ видит только один бакет и не может получить список всех, подключайтесь, указав в поле пути (в разделе More Options диалога подключения) /bucket-name, - тогда Cyberduck откроется сразу в бакете, а не будет сначала пытаться получить список всех бакетов.

Для крупных передач стоит поменять две настройки Cyberduck: в Preferences, Transfers включите использование нескольких соединений для скачивания и загрузки, а если вы часто загружаете большие файлы, оставьте включённой multipart-загрузку (она включена по умолчанию), чтобы при обрыве соединения докачивалась одна часть, а не всё заново.

WinSCP#

WinSCP добавил Amazon S3 как файловый протокол наряду с SFTP, FTP и WebDAV. Его настройки по умолчанию тоже предполагают virtual-hosted style.

  1. В диалоге Login выберите New Site.
  2. Установите File protocol в Amazon S3.
  3. Host name: s3.example.com. Port number: 443.
  4. Access key ID и Secret access key из панели.
  5. Нажмите Advanced, перейдите в Environment, затем S3, и поменяйте URL style с Virtual Host на Path. На той же странице можно задать регион по умолчанию; оставьте его пустым или укажите us-east-1, если провайдер не требует конкретного имени.
  6. Сохраните сайт и войдите.

Если пропустить шаг 5, WinSCP попытается разрешить bucket-name.s3.example.com, и ошибка будет про имя хоста, которое не удаётся разрешить, - из-за чего люди ищут в DNS проблему, которая решается одним выпадающим списком.

Сила WinSCP - во всём, что вокруг подключения. Его функция синхронизации (Commands, Synchronize) сравнивает локальную папку с префиксом бакета и копирует различия, а тем же сайтом можно управлять из скрипта через winscp.com /script=... для заданий по расписанию. Для серьёзной работы по расписанию специальный инструмент вроде rclone всё же лучше - см. статью rclone с хранилищем S3, - но у пользователя Windows, которому нужна ночная загрузка папки по скрипту, WinSCP часто уже установлен.

S3 Browser#

S3 Browser - клиент для Windows, созданный только для S3, поэтому в его диалоге аккаунта больше терминов S3.

  1. Accounts, Add new account.
  2. Account type: S3 Compatible Storage.
  3. REST Endpoint: s3.example.com (добавляйте :port, только если это не стандартный порт для схемы).
  4. Access Key ID и Secret Access Key из панели.
  5. Отметьте Use secure transfer (SSL/TLS) для HTTPS-имени хоста. Снимайте отметку только для голого порта с обычным HTTP.
  6. Откройте расширенные настройки аккаунта и установите addressing model в path style. Версию подписи оставьте самой новой из предложенных (Signature V4).
  7. Сохраните и подключитесь.

Бесплатная редакция лицензирована для личного использования и ограничивает некоторые функции, например число аккаунтов; редакция Pro снимает эти ограничения и обязательна для коммерческого использования. Сильная сторона программы в том, что она показывает, что на самом деле хранит S3: HTTP-заголовки каждого объекта, его метаданные и, если сервер это поддерживает, настройки доступа. Когда картинка скачивается вместо того, чтобы отображаться, потому что её загрузили как binary/octet-stream, именно в S3 Browser вы это увидите и исправите Content-Type.

Подключение бакета как диска#

Mountain Duck и rclone mount показывают бакет как букву диска в Windows или как том в macOS и Linux, так что открыть файлы в нём может любая программа. Это удобно для просмотра и редких правок, но плохо подходит для всего, что много пишет.

bash
$ rclone mount store:media X: --vfs-cache-mode writes

В Windows для rclone mount нужен установленный WinFsp; в macOS нужен macFUSE, а в последних версиях используется подключение на основе NFS. --vfs-cache-mode writes буферизует файлы локально, пока они пишутся, и загружает их при закрытии - именно этого ожидает большинство приложений.

Оговорка здесь принципиальная. В S3 нет частичной записи: изменение одного байта в файле на 2 GB означает повторную загрузку всех 2 GB. Программа, которая часто сохраняется, база данных или игровой сервер, записывающий свой мир, создадут огромный трафик и могут увидеть файлы в несогласованном состоянии. Используйте подключение как диск для чтения и для файлов, которые записываются один раз. Всё остальное копируйте явно.

Чем S3 отличается от привычного диска#

GUI-клиенты хорошо справляются с тем, чтобы бакет выглядел как дерево папок, но иллюзия протекает в нескольких предсказуемых местах.

Папки не настоящие. Ключ - это одна строка, photos/2026/october/cat.jpg, а клиент рисует папки, разбивая её по /. Создание пустой папки в GUI-клиенте обычно загружает пустой объект-заглушку с именем photos/2026/, чтобы папке было что показать. Другие инструменты могут не создавать и не ожидать таких заглушек, поэтому папка, созданная в одном клиенте, может выглядеть иначе в другом, а удаление последнего файла в папке может заставить её исчезнуть.

Переименование - это копирование. В S3 нет переименования. Переименование файла - это копирование на стороне сервера под новый ключ и удаление старого; переименование папки - та же операция для каждого объекта в ней. Для папки с десятью тысячами файлов «переименование» - это двадцать тысяч запросов, и занимает оно немало времени.

Редактирование - это замена. Открытие файла «на месте» скачивает его во временное место, а сохранение загружает его целиком как новый объект. Частичного обновления нет, поэтому редактирование больших файлов через S3 идёт медленно.

Метки времени - это время загрузки. Last-Modified в S3 - это момент, когда объект был записан в бакет, а не когда файл последний раз менялся на вашем компьютере. Некоторые клиенты сохраняют исходное время изменения в метаданных и показывают его, другие - нет. Не решайте по датам в GUI-клиенте, какая копия файла новее.

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

Решение проблем#

СообщениеКлиентПричинаРешение
«Cannot read container configuration»CyberduckVirtual-hosted профиль на path-style endpointИспользуйте path-style профиль
Имя хоста не разрешается, в нём bucket.s3...WinSCP и другиеVirtual-hosted URL styleУстановите URL style в Path
«The request signature we calculated does not match»ЛюбойНеверный секрет или proxy меняет заголовок HostСкопируйте секрет заново; проверьте proxy
«The AWS Access Key Id you provided does not exist»ЛюбойКлиент обращается к Amazon, а не к вашему endpointПроверьте поле сервера
Ошибка SSL handshake или «wrong version number»ЛюбойHTTPS к порту с обычным HTTP или наоборотСогласуйте схему с портом
Несовпадение имени в сертификатеЛюбойПодключение по IP или virtual-hosted styleИспользуйте имя хоста с path-style
Отказ в доступе при получении списка бакетовЛюбойКлюч ограничен одним бакетомОткройте путь к бакету напрямую

Предпоследнюю пару легко перепутать. «Wrong version number» означает, что клиент заговорил на TLS с портом, который отвечает обычным HTTP (или наоборот); несовпадение имени в сертификате означает, что TLS заработал, но имя в сертификате не совпадает с тем, что запросил клиент. Первое - проблема схемы и порта, второе - проблема имени хоста. Почему имя бакета в имени хоста ломает сертификаты, объясняет статья path-style и virtual-hosted URL.

Когда ничего не сходится, проверьте те же ключи через AWS CLI. Если aws s3 ls работает с тем же endpoint и ключами, сервер в порядке, а проблема в настройках GUI-клиента; настройка описана в статье хранилище S3 через AWS CLI.

Ключи на общем или рабочем компьютере#

GUI-клиент сохраняет секретный ключ, чтобы вам не приходилось вводить его каждый раз. Cyberduck хранит его в системной связке ключей (Keychain в macOS или Credential Manager в Windows), WinSCP - в своей конфигурации, если не задан мастер-пароль, а S3 Browser - в настройках аккаунта. На компьютере, которым пользуются другие люди, задайте мастер-пароль в WinSCP, вообще не сохраняйте секрет или используйте ключ, созданный для бакета, где нет ничего чувствительного. Если потерян ноутбук с сохранёнными ключами, в тот же день перевыпустите ключи в панели - это одним шагом обесценит копию на ноутбуке и все остальные копии.

FAQ#

Есть ли S3-клиент с графическим интерфейсом для Linux?

Версии Cyberduck для Linux нет. В Linux обычно выбирают файловый менеджер поверх rclone mount или экспериментальный веб-интерфейс rclone, который запускается командой rclone rcd --rc-web-gui. Большинство пользователей Linux в итоге предпочитают rclone в командной строке.

Можно ли использовать FileZilla для S3?

S3 поддерживает только FileZilla Pro, платная редакция; бесплатный клиент FileZilla - нет. Если вы за него уже платите, выберите протокол S3, укажите в качестве endpoint своё имя хоста и поищите опцию path-style в настройках S3.

Почему я вижу пустые файлы с именами как у папок?

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

Можно ли сделать файл публичным из GUI-клиента?

В некоторых клиентах есть опция «make public» или права доступа, которая задаёт ACL объекта. Сработает ли это, зависит от того, что поддерживает сервер хранилища, поэтому не полагайтесь на неё. Чтобы поделиться файлом, лучше создайте ссылку с ограниченным сроком действия - и Cyberduck, и S3 Browser умеют создавать presigned URL, а как они работают, объясняет статья presigned URL.

Почему загрузка медленнее, чем по SFTP?

Обычная причина - много мелких файлов: каждый объект - это отдельный HTTP-запрос со своей подписью и своим циклом запрос-ответ. Увеличьте число параллельных передач в настройках клиента или упакуйте папки с мелкими файлами в zip перед загрузкой.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000