Садитесь поудобнее и внимательно прочитайте пост, так как он будет полезен всем. Я попробовал интересный софт, который может пригодиться как админам Linux, так и Windows, а также всем остальным любителям настраивать сервера. Речь пойдёт про файловый сервер SFTPGo. Мне очень понравилась его простота, удобство настройки и функционал. Расскажу обо всё по порядку.
Основные возможности SFTPGo:
◽ хранение файлов локально, в том числе в зашифрованных хранилищах, в S3 совместимых хранилищах, в хранилищах с доступом по sftp, в Google Cloud Storage, в Azure Blob Storage
◽ доступ к файлам возможен по sftp, ftp, dav, http
◽ доступ настраивается на основе пользователей и групп, аутентификация по паролю или сертификату
◽ управление сервером осуществляется через web интерфейс
◽ есть REST API с доступом как к управлению, так и к данным
◽ веб интерфейс не только для управления, но и для доступа к файлам пользователями
◽ гибкие настройки правд доступа на основе ACLs
◽ умеет отдавать все свои метрики в формате Prometheus
◽ установка возможна на все популярные операционные системы, в том числе и Windows.
Теперь рассказываю на практике, как выглядит настройка. Устанавливаете SFTPGo. Проще всего через Docker:
8080 порт для управления, 2022 для доступа по sftp. По дефолту остальные службы (FTP и WevDAV) не запущены. Docker рекомендую только для теста. В прод лучше ставить без него. Это будет удобнее, если используете локальное хранилище для файлов. Меньше проблем с монтированием и правами доступа в контейнере.
Идёте в web интерфейс и создаёте пользователя. В момент создания вы указываете, где будут храниться его данные. Это может быть локальная папка, удалённая с доступом через sftp или S3 бакет. Тут же прописываются все доступы к этому удалённому хранилищу. И тут я вижу большое удобство - один раз создаёте пользователя, подключаете ему S3 хранилище и дальше уже везде, где вам надо, используете этого пользователя.
При этом, если пользователю настроена аутентификация с помощью пароля, эту же учётную запись можно использовать для доступа к файлам через web интерфейс.
SFTPGo как минимум удобный и современный ftp/sftp сервер с управлением и доступом к файлам через веб интерфейс. А в дополнение расширенные варианты для хранилищ. Удобно использовать не только как непосредственно файловый сервер для пользователей, но и для служебных целей, таких как организация бэкапов. Особенно если ими необходимо будет пользоваться обычным людям. Для них web доступ будет очень кстати.
Всё реализовано максимально просто и понятно. Функций немного, веб интерфейс не перегружен. Только самое необходимое. Я разобрался очень быстро.
Исходники - https://github.com/drakkan/sftpgo
Репозитории rpm и deb - https://github.com/drakkan/sftpgo/blob/main/docs/repo.md
Инструкция - https://github.com/drakkan/sftpgo/blob/main/docs/howto/getting-started.md#Installation
#fileserver #ftp #sftp
Основные возможности SFTPGo:
◽ хранение файлов локально, в том числе в зашифрованных хранилищах, в S3 совместимых хранилищах, в хранилищах с доступом по sftp, в Google Cloud Storage, в Azure Blob Storage
◽ доступ к файлам возможен по sftp, ftp, dav, http
◽ доступ настраивается на основе пользователей и групп, аутентификация по паролю или сертификату
◽ управление сервером осуществляется через web интерфейс
◽ есть REST API с доступом как к управлению, так и к данным
◽ веб интерфейс не только для управления, но и для доступа к файлам пользователями
◽ гибкие настройки правд доступа на основе ACLs
◽ умеет отдавать все свои метрики в формате Prometheus
◽ установка возможна на все популярные операционные системы, в том числе и Windows.
Теперь рассказываю на практике, как выглядит настройка. Устанавливаете SFTPGo. Проще всего через Docker:
# docker run --name some-sftpgo \
-p 8080:8080 \
-p 2022:2022 \
-d drakkan/sftpgo
8080 порт для управления, 2022 для доступа по sftp. По дефолту остальные службы (FTP и WevDAV) не запущены. Docker рекомендую только для теста. В прод лучше ставить без него. Это будет удобнее, если используете локальное хранилище для файлов. Меньше проблем с монтированием и правами доступа в контейнере.
Идёте в web интерфейс и создаёте пользователя. В момент создания вы указываете, где будут храниться его данные. Это может быть локальная папка, удалённая с доступом через sftp или S3 бакет. Тут же прописываются все доступы к этому удалённому хранилищу. И тут я вижу большое удобство - один раз создаёте пользователя, подключаете ему S3 хранилище и дальше уже везде, где вам надо, используете этого пользователя.
При этом, если пользователю настроена аутентификация с помощью пароля, эту же учётную запись можно использовать для доступа к файлам через web интерфейс.
SFTPGo как минимум удобный и современный ftp/sftp сервер с управлением и доступом к файлам через веб интерфейс. А в дополнение расширенные варианты для хранилищ. Удобно использовать не только как непосредственно файловый сервер для пользователей, но и для служебных целей, таких как организация бэкапов. Особенно если ими необходимо будет пользоваться обычным людям. Для них web доступ будет очень кстати.
Всё реализовано максимально просто и понятно. Функций немного, веб интерфейс не перегружен. Только самое необходимое. Я разобрался очень быстро.
Исходники - https://github.com/drakkan/sftpgo
Репозитории rpm и deb - https://github.com/drakkan/sftpgo/blob/main/docs/repo.md
Инструкция - https://github.com/drakkan/sftpgo/blob/main/docs/howto/getting-started.md#Installation
#fileserver #ftp #sftp
Для подключения по SFTP, SCP или S3 в Windows я использую бесплатную программу WinSCP. Не раз об этом упоминал в разных заметках. Эта программа умеет работать в консольном режиме, плюс поддерживает выполнение команд, переданных через отдельный файл. То есть она поддерживает автоматизацию с использованием простого и интуитивного скриптового языка.
Покажу на простом и наглядном примере передачу файла с Linux машины по SSH на Windows, используя WinSCP и скрипт. Команду на копирование файла мы будем запускать с Windows. У WinSCP есть портабельная версия, так что можно просто скачать и распаковать в какую-нибудь директорию. Оттуда запускать в консольном режиме.
Нам понадобится публичный ключ, с помощью которого мы будем проходить аутентификацию на удалённом сервере, скрипт с набором команд для выполнения после подключения и сам файл, который будем передавать. Сразу уточню, что WinSCP не принимает публичные ключи, сформированные с помощью ssh-keygen. Ключ нужно будет сделать в формате PuTTY, с помощью PuTTYgen. Не понимаю, почему у putty свой формат ключей. Всегда это доставляло только неудобства.
Содержимое скрипта для получения файла с удалённого сервера:
Для того, чтобы быстро узнать hostkey, можно запустить без него. Тогда в консоли увидите ошибку, что ключ указанного сервера не добавлен. Копируете его и добавляете.
Запускаем winscp с этим скриптом так:
Есть testfile.txt уже есть, он будет перезаписан без лишних вопросов и уведомлений. Подобным образом можно очень быстро организовать необходимую автоматизацию. Например, в этом же скрипте можно скачанный файл передать на другой сервер по sftp с аутентификацией по паролю. Нужно добавить пару строк в скрипт:
На сайте WinSCP есть описание работы скриптов, список команд и готовые примеры:
◽️Общее описание скриптов и автоматизации
◽️Команды
◽️Примеры скриптов
Многие вещи с помощью WinSCP будет сделать быстрее и проще, чем в том же bash или других скриптовых языках. Например, забрать самый свежий файл из директории можно вот так:
Я на баше подобное писал, там сильно сложнее. Надо было подключиться по ssh, там выполнить команду с find с параметрами поиска, вывод результата передать в scp. Делал тут когда-то заметку об этом.
Так выглядит проверка существования файла с помощью bat и winscp:
Все действия можно логировать с помощью ключа /log=myscript.log:
Удобная штука, если у вас в хозяйстве есть сервера или рабочие машины с Windows. Многие вещи с WinSCP можно решить относительно просто.
#windows #scp #sftp
Покажу на простом и наглядном примере передачу файла с Linux машины по SSH на Windows, используя WinSCP и скрипт. Команду на копирование файла мы будем запускать с Windows. У WinSCP есть портабельная версия, так что можно просто скачать и распаковать в какую-нибудь директорию. Оттуда запускать в консольном режиме.
Нам понадобится публичный ключ, с помощью которого мы будем проходить аутентификацию на удалённом сервере, скрипт с набором команд для выполнения после подключения и сам файл, который будем передавать. Сразу уточню, что WinSCP не принимает публичные ключи, сформированные с помощью ssh-keygen. Ключ нужно будет сделать в формате PuTTY, с помощью PuTTYgen. Не понимаю, почему у putty свой формат ключей. Всегда это доставляло только неудобства.
Содержимое скрипта для получения файла с удалённого сервера:
# Подключаемся
open scp://root@10.20.1.36/ -privatekey=id_rsa -hostkey="ssh-ed25519 255 s/YHwFuEH3Lq9dGYnBfuELZYkAw4T5umNOPPPFUPCpY"
# Переходим в директорию
cd /home/zerox
# Качаем файл
get testfile.txt "C:\Users\Zerox\Documents\tmp\"
# Отключаемся и выходим
close
exit
Для того, чтобы быстро узнать hostkey, можно запустить без него. Тогда в консоли увидите ошибку, что ключ указанного сервера не добавлен. Копируете его и добавляете.
Запускаем winscp с этим скриптом так:
>winscp.com /ini=nul /script=script.txt
Есть testfile.txt уже есть, он будет перезаписан без лишних вопросов и уведомлений. Подобным образом можно очень быстро организовать необходимую автоматизацию. Например, в этом же скрипте можно скачанный файл передать на другой сервер по sftp с аутентификацией по паролю. Нужно добавить пару строк в скрипт:
open sftp://user:password@10.20.1.100/
put "C:\Users\Zerox\Documents\tmp\testfile.txt" "/mnt/backup"
На сайте WinSCP есть описание работы скриптов, список команд и готовые примеры:
◽️Общее описание скриптов и автоматизации
◽️Команды
◽️Примеры скриптов
Многие вещи с помощью WinSCP будет сделать быстрее и проще, чем в том же bash или других скриптовых языках. Например, забрать самый свежий файл из директории можно вот так:
get -latest /home/user/* c:\downloaded\
Я на баше подобное писал, там сильно сложнее. Надо было подключиться по ssh, там выполнить команду с find с параметрами поиска, вывод результата передать в scp. Делал тут когда-то заметку об этом.
Так выглядит проверка существования файла с помощью bat и winscp:
@echo off
set REMOTE_PATH=/home/user/test.txt
winscp.com /command "open mysession" "stat %REMOTE_PATH%" "exit"
if %ERRORLEVEL% neq 0 goto error
echo File %REMOTE_PATH% exists
rem Do something
exit /b 0
:error
echo Error or file %REMOTE_PATH% not exists
exit /b 1
Все действия можно логировать с помощью ключа /log=myscript.log:
> winscp.com /ini=nul /log=myscript.log /script=myscript.txt
Удобная штука, если у вас в хозяйстве есть сервера или рабочие машины с Windows. Многие вещи с WinSCP можно решить относительно просто.
#windows #scp #sftp