Я пытаюсь использовать ftp-пакет для установки ftps-соединения по умолчанию:
c, err := ftp.Dial("some_srv:some_port", ftp.DialWithTLS(nil))
if err != nil {
log.Fatal(err)
}
и получаю поразительную самообъясняющую ошибку: соединение: соединение отклонено
Документация ужасная, совершенно непонятно, как настроить FTPS, как совместить опции (например, timeout + TLS=true). Есть идеи?)
Я использую github.com/jlaffaye/ftp. Я использую тот же конфиг в Python без проблем
Вы не предоставляете tls.Config, так почему это та же конфигурация, что и у Python? Вы используете неявный TLS или AUTH TLS? В этом пакете есть целый список опций набора, вы комбинируете опции, предоставляя все опции, которые хотите использовать.
В Python я просто передаю tls=true. Здесь, кажется, я не могу передать пустую конфигурацию. Параметры не экспортируются, поэтому я могу использовать только функции, такие как DialWithTls или DialWithTimeout. Но как их совместить? Например, чтобы получить конфигурацию TLS и Timeout вместе.
параметр Dialoptions является вариативным, вы добавляете столько параметров, сколько хотите. Если вы хотите пустой конфиг, передайте пустой конфиг. Похоже, что этот пакет использует конфигурацию nil, чтобы указать, что TLS не следует использовать.
неизвестное поле 'explicitTLS' в литерале структуры типа ftp.DialOption
Если вы хотите установить ExplicitTLS, вы используете функцию DialWithExplicitTLS. Обратите внимание, что ExplicitTLS — это протокол, отличный от того, который вы пытались использовать в первый раз.
Я намеревался установить его в false. var tlsConfig = tls.Config{} var o = ftp.DialWithTLS(&tlsConfig) также не работает. И я до сих пор не понимаю, как совмещать варианты. Можете ли вы уточнить, пожалуйста?
ftp.Dial(addr, ftp.DialWithTLS(cfg), ftp.DialWithContext(ctx)) и так далее.

Я не смог заставить jlaffaye/ftp работать, но нашел очень старую (9 лет) библиотеку github.com/webguerilla/ftps и она работает как шарм:
ftps := new(ftps.FTPS)
ftps.TLSConfig.InsecureSkipVerify = true
err := ftps.Connect("some_host", 21)
if err != nil {
panic(err)
}
Какой пакет вы используете? Вы пытались указать
tls.Config(я полагаю, это то, чтоDialWithTLSпринимает в качестве параметра)? Можете ли вы установить обычное TLS-соединение, и было ли это соединение отклонено уровнем FTP?