SSH-консольный вход работает, но SFTP не работает, почему?

Вопрос или проблема

Я пытаюсь подключиться к SFTP с помощью Filezilla, но она не может подключиться к серверу, и я думаю, что это связано с правилами моего межсетевого экрана?

SSH работает абсолютно нормально. Порт для SSH – 6128. Можете подсказать, какие изменения мне нужно внести, чтобы разрешить подключение по FTP через SSH, учитывая, что SSH уже работает?

(Вот мои правила IPtables)

Цепочка INPUT (политика ACCEPT)
цель     протокол опция источник               назначение
fail2ban-ssh  tcp  --  любой местоположение             любой местоположение             мультипорт порты ssh
ACCEPT     все  --  любой местоположение             любой местоположение
REJECT     все  --  любой местоположение             обратная связь/8           отклонить с помощью icmp-порт-недоступен
ACCEPT     все  --  любой местоположение             любой местоположение             состояние RELATED,ESTABLISHED
ACCEPT     udp  --  любой местоположение             любой местоположение             udp dpt:9987
ACCEPT     tcp  --  любой местоположение             любой местоположение             tcp dpt:10011
ACCEPT     tcp  --  любой местоположение             любой местоположение             tcp dpt:30033
ACCEPT     tcp  --  любой местоположение             любой местоположение             tcp dpt:http
ACCEPT     tcp  --  любой местоположение             любой местоположение             tcp dpt:https
ACCEPT     tcp  --  любой местоположение             любой местоположение             состояние NEW tcp dpt:6128
ACCEPT     icmp --  любой местоположение             любой местоположение             icmp echo-запрос
LOG        все  --  любой местоположение             любой местоположение             limit: avg 5/min burst 5 LOG уровень отладки префикс "iptables denied: "
DROP       все  --  любой местоположение             любой местоположение

Цепочка FORWARD (политика ACCEPT)
цель     протокол опция источник               назначение
DROP       все  --  любой местоположение             любой местоположение

Цепочка OUTPUT (политика ACCEPT)
цель     протокол опция источник               назначение
ACCEPT     все  --  любой местоположение             любой местоположение

Цепочка fail2ban-ssh (1 ссылка)
цель     протокол опция источник               назначение
RETURN     все  --  любой местоположение             любой местоположение

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

  • Установленные серверы OpenSSH
  • Конфигурация sshd_config
    • PubkeyAuthentication yes
    • Subsystem sftp internal-sftp
  • Добавили свой открытый ключ в ~/.ssh/authorized_keys

  • Запустите ssh сервер с открыт портом 22/TCP
    # /etc/init.d/sshd start

  • # iptables -I INPUT -j ACCEPT -p tcp --dport 22

Наконец, проверьте
$ sftp <логин>@<имя_хоста>

В моем случае пользователь имел zsh в верхней части своего файла .bashrc, чтобы он мог перейти в оболочку zsh вместо bash.

bash была его оболочкой по умолчанию. Удаление этого решило проблему. Затем я chsh user -s /bin/zsh для пользователя, чтобы сохранить zsh в качестве его оболочки по умолчанию.

Есть ли у вас какой-либо текст, выводимый на консоль (например, команды echo) в любом из ваших файлов .profile, таких как .bashrc? Это может повлиять на подключение к sftp. Смотрите мой ответ на похожий вопрос на serverfault

Ваше антивирусное ПО также может вызывать это. С этим мы столкнулись недавно. ssh через PuTTY работал нормально, но WinSCP не мог подключиться. Начал работать, как только было настроено исключение в антивирусе.

Если вы используете Filezilla, следующий ответ помог мне:

https://www.digitalocean.com/community/questions/able-to-access-via-ssh-but-not-filezilla

В Filezilla выберите в меню Правка->Настройки, в левой панели
разрежьте до Соединение->SFTP. С правой стороны убедитесь, что у вас есть
правильный файл закрытого ключа, или добавьте отсутствующую запись.

Используя веб-консоль DO, войдите как root и выполните ‘tail -f
/var/log/auth.log’. Затем попробуйте войти с помощью Filezilla и обратите внимание на любые сообщения.

Мой ответ на похожий вопрос на serverfault:

Я только что столкнулся с этой проблемой (специфически для SFTP, но не SSH, где я мог подключиться без проблем), и ни одно из решений здесь не сработало для меня. В моем случае это было вызвано тем, что у меня было слишком много SSH ключей (IdentityFile) в ~/.ssh/. Кажется, что когда у вас нет записи хоста в ~/.ssh/config для хоста, к которому вы пытаетесь подключиться с правильным ключом, он просто отправляет все ваши ключи один за другим. У меня было более 6 ключей, и, конечно же, значение по умолчанию MaxAuthTries – 6 (по крайней мере, в Ubuntu).

Решение заключалось в том, чтобы отредактировать /etc/ssh/sshd_config сервера и увеличить MaxAuthTries. Я установил его на 10.

#MaxAuthTries 6
MaxAuthTries 10

(Или, конечно, просто добавьте запись хоста с правильным ключом – в этом конкретном случае я пытаюсь войти без использования ключа).

В моем случае я выполнил все шаги, описанные в ответе @OMG-1, и смог получить доступ к локальному серверу из командной строки как через ssh, так и через sftp, однако CyberDuck не смог получить к нему доступ через SFTP.

Оказалось, что у меня работал сервис VPN компании, и как только я его отключил, я снова смог получить доступ к своим локальным серверам без проблем через SFTP в CyberDuck.

Я решил это, открыв порт 22, который был испорчен, когда я установил NGINX.

Запустите

sudo ufw status

, чтобы увидеть все правила межсетевого экрана.

Если 22 не указан или не разрешен, выполните

sudo ufw allow 22

Благодаря информации в ответе выше от @Shubham Chaudhary я понял, что моя проблема заключалась в том, что я устанавливал оболочку в bash вместо tcsh в своем файле .tcshrc. Я изменил это, добавив еще одно условие, которое проверяет интерактивный запрос и только тогда переключается на bash. SFTP прекрасно заработал после этого, и bash все еще является моей оболочкой по умолчанию:

# Проверить, является ли оболочка интерактивной
if ($?prompt) then
    # Проверить, выполним ли bash и переключиться на него
    if ( -x /bin/bash ) then
        exec /bin/bash
    endif
endif

Я забыл, что ssh использует строчную p для port, в то время как sftp использует прописную P для port. Арgh, эти несоответствия…

Ответ или решение

SSH-подключение работает, но SFTP не удается подключиться, что может вызвать множество вопросов. Если мы рассматриваем вашу ситуацию, при которой SSH на порту 6128 функционирует корректно, но SFTP не позволяет подключиться через FileZilla, это может быть вызвано различными факторами, такими как настройки брандмауэра, конфигурация серверов, права доступа и другие аспекты.

1. Проверка брандмауэра и IPTables

Ваши правила IPTables указывают на возможность подключения к TCP-порту 6128, однако важно убедиться, что для SFTP-трафика также открыты необходимые порты. Хотя SFTP использует SSH-протокол, важно, чтобы порт SSH был правильно настроен. Убедитесь, что разрешения по IPTables для порта 6128 настроены корректно:

  • Проверьте правила IPTables, чтобы удостовериться, что нет ограничений на доступ из вашей сети или адреса, с которого вы подключаетесь.
  • Например, добавьте правило с указанием вашего IP-адреса, чтобы разрешить трафик:
iptables -A INPUT -p tcp -s <ваш_IP> --dport 6128 -j ACCEPT

2. Конфигурация OpenSSH и SFTP

Убедитесь, что OpenSSH установлен и настроен корректно. В конфигурационном файле /etc/ssh/sshd_config должны быть прописаны следующие строки:

Subsystem sftp internal-sftp

Эта строка указывает на использование встроенного SFTP-сервиса. Проверьте также, что у вас включена аутентификация по ключам и что ваш публичный ключ добавлен в ~/.ssh/authorized_keys вашего сервера.

Возможно, придется перезапустить SSH-сервер после внесения изменений:

sudo systemctl restart sshd

3. Конфликты с оболочкой

В некоторых случаях конфигурация оболочки пользователя может препятствовать правильному функционированию SFTP. Например, если в .bashrc или других конфигурационных файлах оболочки есть команды, производящие вывод текста, это может вызвать ошибки. Убедитесь, что в этих файлах отсутствуют команды, не предназначенные для использования в неинтерактивных сессиях. Если вы используете другую оболочку, попробуйте временно переключиться на bash:

chsh -s /bin/bash <имя_пользователя>

4. Настройки клиента (FileZilla)

Когда вы используете FileZilla, убедитесь, что настройки подключения корректны:

  • Откройте настройки FileZilla и в разделе "Connection" → "SFTP" проверьте, что правильный приватный ключ загружен и используется для подключения.
  • Попробуйте также подключиться с помощью командной строки SFTP для тестирования соединения:
sftp -P 6128 <пользователь>@<hostname>

5. Учет антивирусного ПО и VPN

Иногда антивирусное программное обеспечение или VPN могут блокировать соединения SFTP. Попробуйте временно отключить антивирус и VPN, чтобы проверить, решит ли это проблему с подключением.

6. Логи и диагностика

Наконец, для получения дополнительной информации о проблеме, проверьте журналы аутентификации, используя команду:

tail -f /var/log/auth.log

Это может дать подсказки о том, почему SFTP-соединение завершается неудачно.

Заключение

Тщательная проверка настроек брандмауэра, конфигурации SSH и оболочки, а также диагностика с помощью логов помогут вам выявить причину проблемы. Если после выполнения всех действий проблема сохраняется, возможно, стоит обратиться к более детализированным логам или документации SFTP для выявления специфических ошибок.

Оцените материал
Добавить комментарий

Капча загружается...