Необходимо простое и быстрое тестирование FTPS-сайта

У меня есть сайт FTPS, на который мне нужно передавать файл каждую ночь. Моя проблема заключается в том, что сайт размещен на сайте подрядчика (подрядчик А), а пакет SSIS, который отправляет файл на сайт, был создан/поддерживается другим подрядчиком (подрядчиком Б).

Моя проблема в том, что передача файла не происходит. Каждый из моих подрядчиков обвиняет другого в проблеме, и мне остается определить проблему. Подрядчик B говорит, что его пакет SSIS работает только днем ​​во время тестирования, но не может подключиться ночью, когда это необходимо. Подрядчик А утверждает, что на сайте FTPS нет никаких изменений, которые могли бы вызвать это.

Я могу создать для этого службу .NET, но надеялся на более простое решение. Я собирался создать задачу Windows, которая будет запускать bat-файл каждые 5 минут и использовать ftp-клиент MS. Однако я не могу заставить это работать с FTPS. Я также не смог получить имя пользователя и PW, отправленные с URL-адресом. Любая помощь здесь будет оценена по достоинству. Я был в Google все утро и нашел несколько примеров, которые почти работают, но ничего, что привело бы меня к цели.

Любой простой тест командной строки, который использует Explicit FTP поверх TLS и позволяет передавать имя пользователя и пароль, — это все, что нужно.


person Jeff Reddy    schedule 29.10.2012    source источник
comment
Вы уже выполнили передачу файлов вручную (используя любую клиентскую программу), чтобы убедиться, что Explicit FTP over TLS работает с вашего сайта на сайт подрядчика А? Я думаю, что прежде чем предпринимать какие-либо попытки автоматизации, вы должны убедиться, что вы не столкнетесь с какой-то кроличьей норой, такими как аутентификация, групповая политика, брандмауэры, DPI или что-то еще.   -  person rskar    schedule 27.11.2012
comment
Также немного забавно, что Подрядчик B, кажется, говорит, что днем ​​все работает, а ночью нет. Может быть, ручную передачу файлов нужно сделать ночью, чтобы хотя бы подтвердить, что она работает?   -  person rskar    schedule 27.11.2012
comment
Я сделал ручную передачу файлов с помощью FileZilla. Периодически происходит сбой при использовании неявного FTP, но Explict работает всегда. Прошлой ночью мы провели несколько тестов между 2 и 3 часами ночи. Все работало. Таким образом, кажется, что FTP через наш пакет SSIS дает сбой, но опять же, только при запуске в ночное время.   -  person Jeff Reddy    schedule 27.11.2012
comment
Хорошо, тогда - когда SSIS терпит неудачу, она, по крайней мере, знает, что она не удалась (сообщение об ошибке в журнале или что-то еще)? Или считает, что это успех? Мне интересно, есть ли какая-то проблема с тайм-аутом - что-нибудь, чтобы объяснить успех днем ​​и неудачу ночью.   -  person rskar    schedule 27.11.2012
comment
Исключением, о котором сообщает подрядчик, является «Сайт недоступен».   -  person Jeff Reddy    schedule 27.11.2012
comment
Наиболее интересным здесь представляется следующий аспект: вы говорите, что нашли решения, но они не сработали. Итак, почему вы говорите, что они не сработали? Что случилось? Разве не имеет смысла заставить их работать?   -  person arkascha    schedule 03.12.2012
comment
Кажется, это работа для Wireshark.   -  person Pedro Lamarão    schedule 03.12.2012
comment
@arkascha Я не уверен, какие решения вы имеете в виду? Мы можем подключиться через Filezilla, используя неявное соединение. Когда мы используем пакет SSIS, он работает в течение дня, но во время запланированного выполнения происходит сбой с ошибкой соединения. Я хотел бы проверить это на своем собственном. У меня нет доступа к SSIS, а Filezilla не может быть автоматизирована, поэтому мне нужен скрипт, который может имитировать пакет SSIS, проверяя каждые 5 минут неявное соединение с учетными данными, как это делает пакет SSIS.   -  person Jeff Reddy    schedule 03.12.2012
comment
Понял это. Конечно. Но вы написали в своем вопросе: on Google all morning and have found multiple examples that almost work, but .... Это то, что я имею в виду. Что значит "почти работает"? В чем проблема? Почему вы не можете получить те примеры, которые, как вы нашли, работают?   -  person arkascha    schedule 03.12.2012


Ответы (2)


Чтобы периодически проверять, доступен ли сервис, достаточно простого telnet. Вам даже не нужно говорить по ftp. Если вы действительно хотите загрузить файл, то проще всего будет использовать клиент командной строки ftp, используемый скриптом. Скрипт может быть на любом языке, это не имеет значения.

Возможно, также стоит изучить службу checktls. Это позволяет тестировать tls-соединения, вы можете щелкнуть список команд. В этом случае используются классические ftp-команды, такие как «ПОЛЬЗОВАТЕЛЬ: кто-то» и «ПАРОЛЬ: кто-то» и так далее.


Клиент Filezilla предлагает указать использование явных или неявных tls. Из описания на FileZilla Wiki:

Явный и неявный FTPS

FTPS (SSL/TLS) обслуживается в двух несовместимых режимах. При использовании явного FTPS клиент подключается к обычному FTP-порту и явно переключается в безопасный (SSL/TLS) режим с помощью AUTH TLS, тогда как неявный FTPS — это служба более старого стиля, которая предполагает режим SSL/TLS с самого начала соединения ( и обычно прослушивает TCP-порт 990, а не 21). В клиенте FileZilla это означает добавление к хосту префикса FTPES:// для подключения явного FTPS-сервера или FTPS:// для устаревшего неявного сервера (для которого вам, вероятно, также потребуется установить порт 990).


А вот решение cURL с использованием расширения phps cURL:

// $handle: the file to upload
$handle  = fopen ( $path, 'r' );
// $url: the ftps url to connect to (without credentials)
$url     = sprintf ( 'ftps://%s/%s', $server, $filename ); 
// the ftp connection
$session = curl_init ( ); 
// connection details
curl_setopt ( $curl_session, CURLOPT_URL, $url );
curl_setopt ( $curl_session, CURLOPT_USERPWD, sprintf( '%s:%s', $user, $pass );
curl_setopt ( $curl_session, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt ( $curl_session, CURLOPT_SSL_VERIFYHOST, FALSE );
curl_setopt ( $curl_session, CURLOPT_FTP_SSL, CURLFTPSSL_TRY );
curl_setopt ( $curl_session, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_TLS );
curl_setopt ( $curl_session, CURLOPT_UPLOAD, 1 );
curl_setopt ( $curl_session, CURLOPT_INFILE, $handle );
// execute the connection
$output = curl_exec  ( $session );
// check for errors
$error  = curl_errno ( $session );
// close connection
curl_close ( $session );

Преимущество такого подхода: вы можете его автоматизировать. Например, назовите это заданием cron.

person arkascha    schedule 03.12.2012
comment
Я думаю, что проблема связана с явной и неявной FTPS, поэтому это не так просто, как проверка соединения. Нам нужно проверить соединение, а также войти в систему с учетными данными. Мы обнаружили, что явный FTPS периодически дает сбой, поэтому нам нужно проверить неявно. - person Jeff Reddy; 03.12.2012
comment
Извините, но сбой периодически звучит для меня так, как будто это проблема на стороне сервера. Я бы сказал, почини этот сервер. Или лучше: отремонтируйте (или замените) его ответственным за него. - person arkascha; 03.12.2012
comment
Хорошо, теперь вы видите мою проблему. Это не мой сервер. Сервер принадлежит подрядчику, который говорит, что проблем с сервером нет. Я думаю, что есть. Итак, мне нужен способ проверить это, чтобы я мог сказать, что я подключался весь день, но в 2 часа ночи он начинает отказывать в подключении или что-то в этом роде. Прямо сейчас он обвиняет подрядчика (другую компанию), создавшего пакет SSIS. - person Jeff Reddy; 03.12.2012
comment
Хорошо, я понимаю этот момент. Я только что нашел сервис checktls, добавил его в ответ. Может стоит попробовать... - person arkascha; 03.12.2012
comment
Добавлена ​​цитата из FileZilla Wiki об использовании FileZilla для явного и неявного ftp. - person arkascha; 04.12.2012
comment
Да, мне удалось заставить клиентское приложение FileZilla работать, используя неявное соединение. Однако это не имитирует автоматическое соединение, которое выполняет наш пакет SSIS, поэтому это недопустимый тест. Вот почему я ищу что-то, что я могу запускать без присмотра каждые 5 минут или около того. Однако я не могу найти ничего, что поддерживает неявное соединение с переданными учетными данными. - person Jeff Reddy; 04.12.2012
comment
Хорошо, если вы хотите что-то автоматизировать, используйте скриптовый подход. Дает вам бесконечную гибкость. Я добавил в ответ пример подхода на основе cURL с использованием синтаксиса php. Та же логика, очевидно, доступна везде, где у вас есть cURL. - person arkascha; 04.12.2012
comment
Я дал вам ответ и награду только потому, что все равно собирался потерять награду, и я знаю, что вы приложили много усилий для ответа. Надеюсь, ты понял. Не уверен, как именно работает баунти. В итоге я использовал WinSCP. - person Jeff Reddy; 03.01.2013
comment
ОК, отлично, что вы нашли решение по крайней мере. Я не получил награду, но это не имеет значения. Это просто глупые точки без смысла, кого это волнует? Спасибо! - person arkascha; 04.01.2013

WinSCP — это скриптовый, даже для FTPS.

person jbtule    schedule 29.11.2012