Безопасный FTP с использованием пакета Windows script - программирование
Подтвердить что ты не робот

Безопасный FTP с использованием пакета Windows script

В настоящее время у меня есть пакетные скрипты на разных серверах, которые передают файл csv на FTP-сервер в другом месте. Мой script выглядит примерно так:

echo user ftp_user> ftpcmd.dat
echo password>> ftpcmd.dat
echo put c:\directory\%1-export-%date%.csv>> ftpcmd.dat
echo quit>> ftpcmd.dat
ftp -n -s:ftpcmd.dat ftp.MyFTPSite.com
del ftpcmd.dat

Если бы я хотел запросить безопасную передачу, будет ли обновлен мой script?

Спасибо.

4b9b3361

Ответ 1

Во-первых, убедитесь, что вы понимаете, если вам нужно использовать Secure FTP (= FTPS, согласно вашему тексту) или SFTP (в соответствии с используемым тегом).

Ни одна из них не поддерживается командной строкой Windows ftp.exe. Как вы уже сказали, вы можете использовать WinSCP. Он поддерживает как FTPS, так и SFTP.

Используя WinSCP, ваш командный файл будет выглядеть (для SFTP):

echo open sftp://ftp_user:[email protected] -hostkey="server hostkey" >> ftpcmd.dat
echo put c:\directory\%1-export-%date%.csv >> ftpcmd.dat
echo exit >> ftpcmd.dat
winscp.com /script=ftpcmd.dat
del ftpcmd.dat

И командный файл:

winscp.com /log=ftpcmd.log /script=ftpcmd.dat /parameter %1 %date%

Хотя использование всех возможностей WinSCP (в частности, предоставление команд непосредственно в командной строке и синтаксис %TIMESTAMP%), пакетный файл упрощает:

winscp.com /log=ftpcmd.log /command ^
    "open sftp://ftp_user:[email protected] -hostkey=""server hostkey""" ^
    "put c:\directory\%1-export-%%TIMESTAMP#yyyymmdd%%.csv" ^
    "exit"

С целью переключения -hostkey см. -hostkey ключа хоста в скрипте.

Проще собрать скрипт/пакетный файл вручную - настроить и проверить параметры подключения в графическом интерфейсе WinSCP, а затем создать для него сценарий или командный файл:

Generate batch file

Все, что вам нужно настроить, это имя исходного файла (используйте синтаксис %TIMESTAMP% как показано выше) и путь к файлу журнала.


Для FTPS замените sftp:// в команде open с помощью ftpes:// (явный TLS/SSL) или ftps:// (неявный TLS/SSL). Снимите переключатель -hostkey.

winscp.com /log=ftpcmd.log /command ^
    "open ftps://ftp_user:[email protected] -explicit" ^
    "put c:\directory\%1-export-%%TIMESTAMP#yyyymmdd%%.csv" ^
    "exit"

Возможно, вам придется добавить переключатель -certificate, если сертификат сервера не выдается доверенным органом.

Опять же, как и в SFTP, проще настроить и проверить настройки соединения в графическом интерфейсе WinSCP, а затем создать для него сценарий или командный файл.


См. Полное руководство по конверсии из ftp.exe в WinSCP.

Вы также должны прочитать Руководство по автоматизации передачи файлов на FTP-сервер или SFTP-сервер.


Примечание для использования %TIMESTAMP#yyyymmdd% вместо %date%: Формат значения переменной %date% зависит от локали. Поэтому убедитесь, что вы протестируете скрипт в той же локали, на которой вы собираетесь использовать скрипт. Например, в моем чешском языке %date% разрешает čt 06. 11. 2014, что может быть проблематичным при использовании в качестве части имени файла.

По этой причине WinSCP поддерживает (локально-нейтральное) форматирование временной метки. Например, %TIMESTAMP#yyyymmdd% разрешается до 20170515 по любой языковой программе.

(Я автор WinSCP)

Ответ 2

Встроенная команда FTP не имеет возможности для обеспечения безопасности. Вместо этого используйте cUrl. Он доступен для написания сценариев, гораздо более надежный и имеет защиту FTP.

Ответ 3

    ftps -a -z -e:on -pfxfile:"S-PID.p12" -pfxpwfile:"S-PID.p12.pwd" -user:<S-PID number> -s:script <RemoteServerName> 2121

S-PID.p12 => certificate file name ;
S-PID.p12.pwd => certificate password file name ; 
RemoteServerName =>  abcd123 ; 
2121 => port number ; 
ftps => command is part of ftps client software ;