Вопрос или проблема
Я пытаюсь установить соединение SFTP с помощью следующей команды: sftp user@host, но это не удается, и выводится сообщение: запрос подсистемы не удался на канале 0. Соединение SSH user@host с тем же хостом выполняется успешно.
Я прикладываю полный файл конфигурации sshd-config, который я использую:
# $OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $
# Это файл конфигурации сервера sshd для всей системы. См.
# sshd_config(5) для получения дополнительной информации.
# Этот sshd был скомпилирован с PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
# Стратегия, используемая для параметров в конфигурации по умолчанию sshd_config, поставляемой с
# OpenSSH, заключается в том, чтобы указывать параметры с их значением по умолчанию, где
# это возможно, но оставлять их закомментированными. Раскомментированные параметры переопределяют
# значение по умолчанию.
# Чтобы изменить конфигурацию sshd на уровне системы, создайте файл с расширением *.conf в
# /etc/ssh/sshd_config.d/, который будет автоматически включен ниже
Include /etc/ssh/sshd_config.d/*.conf
# Если вы хотите изменить порт на системе SELinux, вам нужно сообщить
# SELinux об этом изменении.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key
KexAlgorithms +diffie-hellman-group1-sha1
HostKeyAlgorithms +ssh-dss
PubkeyAcceptedAlgorithms +ssh-dss
Ciphers +aes128-cbc
HostKey /etc/ssh/ssh_host_dsa_key
# Шифры и ключи
#RekeyLimit default none
# Ведение журнала
#SyslogFacility AUTH
#LogLevel INFO
# Аутентификация:
#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
MaxSessions 50
#PubkeyAuthentication yes
# По умолчанию проверяются оба .ssh/authorized_keys и .ssh/authorized_keys2,
# но это переопределяется, поэтому установки будут проверять только .ssh/authorized_keys
AuthorizedKeysFile .ssh/authorized_keys
#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody
# Для этого вам также понадобятся ключи хоста в /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Измените на yes, если вы не доверяете ~/.ssh/known_hosts для
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Не читать файлы пользователя ~/.rhosts и ~/.shosts
#IgnoreRhosts yes
# Чтобы отключить туннелирование паролей в открытом виде, измените на no здесь!
#PasswordAuthentication yes
#PermitEmptyPasswords no
# Измените на no, чтобы отключить пароли s/key
#KbdInteractiveAuthentication yes
# Опции Kerberos
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
#KerberosUseKuserok yes
# Опции GSSAPI
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
#GSSAPIEnablek5users no
# Установите это значение на 'yes', чтобы включить аутентификацию PAM, обработку учетных записей
# и обработку сессий. Если это включено, аутентификация PAM будет
# разрешена через KbdInteractiveAuthentication и
# PasswordAuthentication. В зависимости от вашей конфигурации PAM,
# аутентификация PAM через KbdInteractiveAuthentication может обойти
# установку "PermitRootLogin without-password".
# Если вы хотите, чтобы проверки учетных записей и сессий PAM выполнялись без
# аутентификации PAM, включите это, но установите PasswordAuthentication
# и KbdInteractiveAuthentication на 'no'.
# ПРЕДУПРЕЖДЕНИЕ: 'UsePAM no' не поддерживается в RHEL и может вызвать множество
# проблем.
#UsePAM no
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding no
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none
# нет пути по умолчанию для баннера
#Banner none
# переопределить значение по умолчанию для подсистем
# Пример переопределения настроек на уровне пользователя
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
Subsystem sftp internal-sftp
MaxStartups 300
Match User amssftp
ChrootDirectory /ams
ForceCommand internal-sftp -u 0002
Не могли бы вы помочь мне разобраться с этой проблемой?
Я прикладываю вывод команды с опцией -vv:
[root@localhost ~]# sftp -vv [email protected]
OpenSSH_8.7p1, OpenSSL 3.0.7 1 Nov 2022
debug1: Чтение данных конфигурации /etc/ssh/ssh_config
debug1: Чтение данных конфигурации /etc/ssh/ssh_config.d/50-redhat.conf
debug2: проверка совпадения для 'final all' хост 10.85.220.158, изначально 10.85.220.158
debug2: совпадение не найдено
debug1: Чтение данных конфигурации /etc/crypto-policies/back-ends/openssh.config
debug1: запрос конфигурации финального совпадения
debug2: resolve_canonicalize: имя хоста 10.85.220.158 является адресом
debug1: повторный парсинг конфигурации
debug1: Чтение данных конфигурации /etc/ssh/ssh_config
debug1: Чтение данных конфигурации /etc/ssh/ssh_config.d/50-redhat.conf
debug2: проверка совпадения для 'final all' хост 10.85.220.158, изначально 10.85.220.158
debug2: совпадение найдено
debug1: Чтение данных конфигурации /etc/crypto-policies/back-ends/openssh.config
debug1: Подключение к 10.85.220.158 [10.85.220.158] порт 22.
debug1: Соединение установлено.
debug1: файл идентификации /root/.ssh/id_rsa типа -1
debug1: файл идентификации /root/.ssh/id_rsa-cert типа -1
debug1: файл идентификации /root/.ssh/id_dsa типа -1
debug1: файл идентификации /root/.ssh/id_dsa-cert типа -1
debug1: файл идентификации /root/.ssh/id_ecdsa типа -1
debug1: файл идентификации /root/.ssh/id_ecdsa-cert типа -1
debug1: файл идентификации /root/.ssh/id_ecdsa_sk типа -1
debug1: файл идентификации /root/.ssh/id_ecdsa_sk-cert типа -1
debug1: файл идентификации /root/.ssh/id_ed25519 типа -1
debug1: файл идентификации /root/.ssh/id_ed25519-cert типа -1
debug1: файл идентификации /root/.ssh/id_ed25519_sk типа -1
debug1: файл идентификации /root/.ssh/id_ed25519_sk-cert типа -1
debug1: файл идентификации /root/.ssh/id_xmss типа -1
debug1: файл идентификации /root/.ssh/id_xmss-cert типа -1
debug1: Строка версии локального SSH-2.0-OpenSSH_8.7
debug1: Удаленная версия протокола 2.0, удаленная версия ПО OpenSSH_3.5p1
debug1: compat_banner: совпадение: OpenSSH_3.5p1 pat OpenSSH_3.* compat 0x01000002
debug2: fd 3 установка O_NONBLOCK
debug1: Аутентификация к 10.85.220.158:22 как 'admin'
debug1: load_hostkeys: fopen /root/.ssh/known_hosts2: Файл или каталог не существует
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: Файл или каталог не существует
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: Файл или каталог не существует
debug1: SSH2_MSG_KEXINIT отправлено
debug1: SSH2_MSG_KEXINIT получено
debug2: локальное предложение KEXINIT
debug2: KEX алгоритмы: curve25519-sha256,[email protected], ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group1-sha1, ext-info-c
debug2: алгоритмы ключей хоста: [email protected],[email protected],[email protected],rsa-sha2-512,rsa-sha2-256,ssh-rsa,[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,[email protected],[email protected],ssh-dss
debug2: шифры ctos: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected],aes128-cbc
debug2: шифры stoc: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected],aes128-cbc
debug2: MACs ctos: [email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha1,[email protected],hmac-sha2-512
debug2: MACs stoc: [email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha1,[email protected],hmac-sha2-512
debug2: сжатие ctos: none,[email protected],zlib
debug2: сжатие stoc: none,[email protected],zlib
debug2: языки ctos:
debug2: языки stoc:
debug2: first_kex_follows 0
debug2: reserved 0
debug2: предложение KEXINIT сервера-равному
debug2: KEX алгоритмы: diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
debug2: алгоритмы ключей хоста: ssh-rsa,ssh-dss
debug2: шифры ctos: aes128-cbc,3des-cbc,blowfish-cbc,arcfour,aes192-cbc,aes256-cbc,[email protected]
debug2: шифры stoc: aes128-cbc,3des-cbc,blowfish-cbc,arcfour,aes192-cbc,aes256-cbc,[email protected]
debug2: MACs ctos: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96
debug2: MACs stoc: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96
debug2: сжатие ctos: none
debug2: сжатие stoc: none
debug2: языки ctos:
debug2: языки stoc:
debug2: first_kex_follows 0
debug2: reserved 0
debug1: kex: алгоритм: diffie-hellman-group1-sha1
debug1: kex: алгоритм ключа хоста: ssh-rsa
debug1: kex: шифр сервера->клиент: aes128-cbc MAC: hmac-sha1 сжатие: none
debug1: kex: шифр клиент->сервера: aes128-cbc MAC: hmac-sha1 сжатие: none
debug1: kex: diffie-hellman-group1-sha1 need=20 dh_need=20
debug1: kex: diffie-hellman-group1-sha1 need=20 dh_need=20
debug1: ожидает SSH2_MSG_KEX_ECDH_REPLY
debug1: SSH2_MSG_KEX_ECDH_REPLY получено
debug1: Ключ хоста сервера: ssh-rsa SHA256:ZlIlk1cHA8WnjeJxK+DrLleDOiTlfb1cOMypierJ1Ww
debug1: load_hostkeys: fopen /root/.ssh/known_hosts2: Файл или каталог не существует
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: Файл или каталог не существует
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: Файл или каталог не существует
debug1: Хост '10.85.220.158' известен и соответствует ключу RSA хоста.
debug1: Ключ найден в /root/.ssh/known_hosts:5
debug2: bits set: 500/1024
debug2: set_newkeys: режим 1
debug1: переинициализация через 4294967296 блоков
debug1: SSH2_MSG_NEWKEYS отправлено
debug1: ожидает SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS получено
debug2: set_newkeys: режим 0
debug1: переинициализация через 4294967296 блоков
debug1: Попытка ключа: /root/.ssh/id_rsa
debug1: Попытка ключа: /root/.ssh/id_dsa
debug1: Попытка ключа: /root/.ssh/id_ecdsa
debug1: Попытка ключа: /root/.ssh/id_ecdsa_sk
debug1: Попытка ключа: /root/.ssh/id_ed25519
debug1: Попытка ключа: /root/.ssh/id_ed25519_sk
debug1: Попытка ключа: /root/.ssh/id_xmss
debug2: pubkey_prepare: готово
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT получено
debug1: Аутентификации, которые могут продолжаться: password
debug1: Следующий метод аутентификации: password
[email protected]'s password:
debug2: мы отправили пакет пароля, ждем ответа
Аутентификация к 10.85.220.158 ([10.85.220.158]:22) с использованием "password".
debug1: pkcs11_del_provider: вызвано, provider_id = (null)
debug1: канал 0: новый [client-session]
debug2: канал 0: отправить открыть
debug1: Вход в интерактивную сессию.
debug1: pledge: файловая система полная
debug2: channel_input_open_confirmation: канал 0: начало обратного вызова
debug2: fd 3 установка TCP_NODELAY
debug2: client_session2_setup: id 0
debug1: Отправка подсистемы: sftp
debug2: канал 0: запрос подтверждения подсистемы 1
debug2: channel_input_open_confirmation: канал 0: обратный вызов завершен
debug2: канал 0: открыть подтвердить rwindow 0 rmax 32768
debug2: channel_input_status_confirm: тип 100 id 0
запрос подсистемы не удался на канале 0
Соединение закрыто
Соединение закрыто.
Ответ или решение
Проблема, с которой вы столкнулись — "subsystem request failed on channel 0" — обычно возникает в результате неправильной конфигурации SFTP-демона (sshd) на сервере. В вашем случае SFTP успешен через SSH, но не может быть инициализирован в режиме SFTP. Вы уже предоставили содержимое файла конфигурации sshd_config
, и на его основе давайте рассмотрим возможные причины и решения.
Причины проблемы
-
Неверно настроенный Subsystem: В вашем конфигурационном файле
sshd_config
вы указалиSubsystem sftp internal-sftp
, однако также у вас есть блокMatch User amssftp
, который используетForceCommand internal-sftp
. Если подключаетесь под другим пользователем (неamssftp
), может возникнуть эта ошибка. -
Отсутствие необходимых прав доступа к Chroot: Если пользователь
amssftp
используется с Chroot, убедитесь, что структура директорий и права на них настроены правильно. -
Старые версии OpenSSH: Ваша версия OpenSSH (3.5p1) устарела, обновление OpenSSH может помочь избежать проблем с поддержкой новых алгоритмов.
-
Неправильные настройки Chroot: Ваша конфигурация имеет
ChrootDirectory /ams
. Убедитесь, что:/ams
— это директория, принадлежащая пользователю root (chown root:root /ams
).- Директория имеет правильные права (0x700 для корневой директории).
Решение
-
Проверьте конфигурацию Subsystem:
- Убедитесь, что у вас правильные настройки для использования SFTP. Вам нужно либо убрать специфические настройки для
Match User amssftp
, если они не нужны, либо удостовериться, что вы используете правильного пользователя при подключении.
- Убедитесь, что у вас правильные настройки для использования SFTP. Вам нужно либо убрать специфические настройки для
-
Проверьте права на директории:
- Выполните следующие команды, чтобы указать корректные права:
sudo chown root:root /ams sudo chmod 755 /ams
- Выполните следующие команды, чтобы указать корректные права:
-
Настройка
sshd_config
:- Если не требуется использование
Chroot
, вы можете закомментировать или удалить строки, касающиесяChrootDirectory
иForceCommand
.
- Если не требуется использование
-
Перезапустите службу sshd после внесения изменений в конфигурацию:
sudo systemctl restart sshd
-
Обновите OpenSSH:
- Если возможно, обновите OpenSSH на сервере до более поздней версии, например, 7.0 или выше, что может решить некоторые проблемы с совместимостью.
Тестирование
После реализации вышеуказанных шагов, попробуйте снова подключиться с помощью sftp
:
sftp user@host
Если ошибка всё еще присутствует, запустите sftp
с опцией -vv
для дополнительной отладки:
sftp -vv user@host
Это даст вам больше информации о том, на каком этапе происходит сбой.
Если проблемы продолжатся, рассмотрите возможность проверки логов сервера (/var/log/auth.log
или /var/log/secure
в зависимости от вашей ОС) для получения дополнительных подсказок.