1 июля 2025 г.

Настройка SFTP

 Установка, настройка и подключение по SFTP
Сам написал

Установить ssh
apt install openssh-server

Добавить в автозапуск и запустить сервис
sudo systemctl enable ssh
sudo systemctl start ssh

Создать директорию для обмена
mkdir -p /data/obmen

Создать группу для sftp пользователей
addgroup sftp

Назначить права и владельца на каталог для chroot
chown root:root /data
chmod 755 /data

На каталог, куда будут загружаться файлы изменить владельца и права
chown root:sftp /data/obmen
chmod 770 /data/obmen

Теперь добавить пользвателя для подключения
useradd -m user1 -g sftp
passwd user1

Напоследок отредактируем файл конфигурации ssh /etc/ssh/sshd_config добавив в конец файла следующие строки
Match group sftp
ChrootDirectory /data
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Этот кусок конфигурационного файла будет таргетировать всех пользователей группы sftp в директорию /data с использованием chroot, т.е. пользователи не смогут попасть в директории по иерархии выше. Им будет видна и доступна только директория /data и её поддиректории.

Перезагрузить службу для применения изменений.
systemctl restart ssh


Настройка логгирования действий (опционально)
В файле /etc/ssh/sshd_config
ForceCommand internal-sftp меняем на
ForceCommand internal-sftp -l INFO -f USER


Для регистрации действий пользователя необходимо ему в ChrootDirectory пробросить /dev/log. Для этого выполнить следующие команды
mkdir /data/dev
touch /data/dev/log
chmod 511 /data/dev
chattr +i /data/dev
mount --bind /dev/log /data/dev/log

Перезагрузить сервис
systemctl restart ssh

Логи будут доступны в файле /var/log/user.log

Создание дополнительных пользователей.
Если необходимо, можно добавить еще пользователя командами
useradd -m user2 -g sftp
passwd user2
Рекомендуется для каждого экземпляра АСД создавать отдельного пользователя.
Проверка подключения
В linux

 
Установить пакет
apt install openssh-client

Выполнить команду
sftp user1@10.0.0.1
Ввести пароль.
В случае успешного подключения появится надпись
Connected to 10.0.0.1
sftp>

Для неинтерактивной отправки файла (одной командой из терминала) необходимо выполнить следующие действия:
Поменяться ключами между клиентом и сервером. Для этого на сервере  у пользователя, которым будем подключаться, необходимо создать файл с ключами. Например
sudo -u user1 mkdir /home/user1/.ssh/
На клиенте
Сгенерировать, если еще не сгенерировали, ключ командой ssh-keygen
Содержимое файла ~/.ssh/id_rsa.pub скопировать и поместить в файл /home/user1/.ssh/authorized_keys

После данных манипуляций, можно подлкючаться пользователем user1 без ввода пароля.
sftp user1@10.0.0.1

Для неинтерактивной перелачи файлов
Создать пакетный файл, в котором прописать команды. Например
создать файл /tmp/upload.txt
Чтобы отправить файл /tmp/file необходимо в файл /tmp/upload.txt прописать
put /tmp/file /obmen/
exit

Выполнить команду для отравки
sftp -b /tmp/upload.txt user1@10.0.0.1


Топ 10 полезных команд на sftp

Проверьте текущий рабочий каталог
Команда «lpwd» используется для проверки локального текущего рабочего каталога, а команда «pwd» - для проверки удаленного рабочего каталога.
sftp> lpwd
Local working directory: /
sftp> pwd
Remote working directory: /merionet/

Список файлов
Перечисление файлов и каталогов как в локальной, так и в удаленной системе.
sftp> ls        [На локальной]
sftp> lls     [На удаленной]

Скачать файлы
Получение одного или нескольких файлов в локальной системе.
sftp> get SettlementReport_1-10th.xls
Fetching /merionet/SettlementReport_1-10th.xls to SettlementReport_1-10th.xls

Получить несколько файлов в локальной системе.
sftp> mget *.xls

Примечание: Как мы видим по умолчанию, команда get загружает файл в локальной системе с тем же именем. Мы можем скачать удаленный файл с другим именем, указав имя в конце (это применимо только при загрузке одного файла).

Переключение каталогов
Переключение из одного каталога в другой в локальных и удаленных местах.
sftp> cd test        [На локальной]
sftp> lcd Documents    [На удаленной]

Создать каталоги
Создание новых каталогов в локальных и удаленных местах.
sftp> mkdir test            [На локальной]
sftp> lmkdir Documents    [На удаленной]

Удалить каталоги
Удалить каталог или файл в удаленной системе.
sftp> rm Report.xls            [На локальной]
sftp> rmdir sub1            [На удаленной]

Примечание: чтобы удалить любой каталог из удаленного расположения, каталог должен быть пустым.
Выход из sFTP Shell
Команда ‘!’ выкидывает нас в локальную оболочку, откуда мы можем выполнять команды Linux. Введите команду ‘exit’, после чего мы сможем увидеть подсказку sftp>.

sftp> !

[root@sftp ~]# exit
Shell exited with status 1
sftp>

Комментариев нет:

Отправить комментарий