Вопрос или проблема
Я пытаюсь подключиться к 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 для выявления специфических ошибок.