Получать файл через SFTP / SSH и автоматически пересылать на FTP на другой сервер - PullRequest
9 голосов
/ 01 мая 2011

В настоящее время я нахожусь в ситуации, когда я получаю плоские файлы через FTP от моих клиентов.Несколько клиентов настаивали на необходимости использовать SSH Private Key SFTP, а не обычный FTP.

Что я хочу сделать, это настроить веб-сервер (желательно в Linux / Unix, но я думаю, что я могу сделать это наWindows Server и приобретите программное обеспечение SFTP-сервера), который будет выполнять следующие действия:

  1. Позвольте мне настроить каталог SFTP для каждого клиента с уникальным пользователем / паролем.В каждом каталоге также должен быть открытый / закрытый ключ SSH "вещи". Я немного новичок в этом, но я его погуглил.

  2. Как только файл полностью загруженклиент, я хочу запустить событие, что FTP-файл этого файла через обычный FTP в моем облаке Windows.

  3. Эти файлы могут быть до 10 МБ, так что даже эти FTP-файлы на другой сервер можетне запускается, пока файл не будет полностью загружен.

Кто-нибудь настраивал что-то подобное?Любое руководство будет оценено.

Спасибо!

Ответы [ 4 ]

5 голосов
/ 02 мая 2011

В Linux вы можете использовать incron , чтобы отслеживать каталог, к которому будут передаваться файлы по протоколу SFTP, и запускать ваше задание ftp.Это похоже на cron, за исключением того, что вместо запуска заданий на основе времени он делает это на основе изменений файловой системы.Для запуска только после того, как весь файл был записан, я думаю, что вы можете использовать IN_CLOSE_WRITE в маске inotify.В противном случае я предлагаю настроить события для каждого из событий в отдельности, чтобы отобразить сообщение в файл журнала и посмотреть, сможете ли вы определить его, которое надежно происходит только в конце передачи SFTP.используя RedHat, его нет в стандартном дистрибутиве, но он находится в EPEL .

4 голосов
/ 02 мая 2011

В Windows вы можете использовать Titan FTP Server Enterprise Edition, который поддерживает SFTP, а также позволяет определять различные типы событий.Когда событие запускается, вы можете запустить все, что вам нужно для каждой папки / для каждой учетной записи.

PS.AFAIK, когда речь идет о SFTP, это либо аутентификация по паролю, либо аутентификация с открытым ключом (ключ SSH), но не обе.

3 голосов
/ 12 мая 2011

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

Написание прокси легко с помощью правильных инструментов, например, в Perl с использованием модуля Net :: OpenSSH :

#!/usr/bin/perl
# this is the sftp-proxy-server

use Net::OpenSSH;
my $ssh = Net::OpenSSH->new($windows_server, $user, $passwd);
$ssh->system({ssh_opts => '-s'}, 'sftp');
$ssh->error and die $ssh->error;

Вы можете указать серверу SSH использовать этоальтернативный SFTP-сервер изменяет конфигурацию в /etc/ssh/sshd_config.Например:

Subsystem sftp /usr/local/bin/sftp-proxy-server
2 голосов
/ 06 декабря 2012

Вы пробовали apache FTP Serveur?

Я думаю, что вы можете делать то, что вам нужно, с помощью ftplet API.

см: http://mina.apache.org/ftpserver-project/index.html

...