Вопрос или проблема
Я пытаюсь настроить аккаунт SFTP для определенной папки. Я создал группу ftpaccess
и пользователя testuser
с домашним каталогом, как показано здесь:
sudo addgroup ftpaccess
sudo useradd -d /home/forge/mydomain.com/downloads -m testuser -g ftpaccess -s /bin/false
sudo passwd testuser
sudo chown root:root /home/forge/mydomain.com/downloads
sudo chmod 755 /home/forge/mydomain.com/downloads
Затем я создал каталог transfers внутри домашней папки testuser
:
sudo mkdir /home/forge/mydomain.com/downloads/transfers
sudo chown testuser:ftpaccess /home/forge/mydomain.com/downloads/transfers
После этого я настроил sshd_config
следующим образом (правила добавлены в конец файла):
# SFTP аккаунт
Subsystem sftp internal-sftp
Match group ftpaccess
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
PasswordAuthentication yes
Теперь пытаюсь подключиться по SFTP с этим пользователем sftp testuser@localhost
, но получаю ошибку:
packet_write_wait: Connection to 127.0.0.1 port 22: Broken pipe
Couldn't read packet: Connection reset by peer
Что я делаю не так?
Пожалуйста, попробуйте переместить строку Subsystem sftp internal-sftp из вашего существующего блока в # override default of no subsystems в sshd_config
Это сработало для меня.
Ответ или решение
Проблема, с которой вы столкнулись, связанная с ошибкой "Broken pipe" и "Couldn’t read packet: Connection reset by peer", может быть вызвана несколькими факторами в вашей конфигурации SFTP. Давайте рассмотрим ваш случай и возможные шаги для его решения.
Ваша конфигурация выглядит почти правильно, но есть несколько моментов, на которые стоит обратить внимание:
-
Права доступа на ChrootDirectory:
Убедитесь, что директория, указанная как ChrootDirectory (/home/forge/mydomain.com/downloads
), имеет правильные права доступа. Эта директория должна принадлежать пользователюroot
и иметь права на чтение и выполнение (обычно это права755
). Ваша команда уже настроила это правильно:sudo chown root:root /home/forge/mydomain.com/downloads sudo chmod 755 /home/forge/mydomain.com/downloads
-
Права доступа на внутреннюю директорию:
Директорияtransfers
, куда пользователь будет загружать файлы, должна принадлежать пользователюtestuser
и группеftpaccess
, что вы уже сделали:sudo mkdir /home/forge/mydomain.com/downloads/transfers sudo chown testuser:ftpaccess /home/forge/mydomain.com/downloads/transfers
-
Конфигурация sshd_config:
Попробуйте переместить строкуSubsystem sftp internal-sftp
на более высокий уровень в конфигурационном файлеsshd_config
. Например, переместите эту строку в раздел, где указано# override default of no subsystems
. Это может помочь решить проблему с подключением. Обновлённый файлsshd_config
должен выглядеть так:# override default of no subsystems Subsystem sftp internal-sftp Match group ftpaccess ChrootDirectory %h X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp PasswordAuthentication yes
-
Перезагрузка SSH:
После того как вы внесли изменения в конфигурационный файл, не забудьте перезагрузить службу SSH:sudo systemctl restart ssh
-
Логи:
Если после этих изменений проблема не решается, посмотрите логи SSH. Они могут дать дополнительную информацию о том, что именно идет не так:sudo tail -f /var/log/auth.log
Это может помочь выявить ошибки, возникающие во время аутентификации.
После выполнения этих шагов, попробуйте снова подключиться с помощью SFTP. Если ошибка всё ещё присутствует, следует проверить сетевые настройки, межсетевые экраны и убедиться, что конфигурация SSH правильно настроена для обработки входящих соединений.
Надеюсь, эти рекомендации помогут вам решить проблему с подключением SFTP.