В рамках запланированной задачи, которая выполняется на компьютере с Windows Server 2012, я использую WinSCP для подключения через sFTP с использованием учетных данных и ключа ssh-rsa. Когда запускается запланированная задача, соединение не устанавливается со следующим сообщением об ошибке:
2019/08/26 05:27:28 - Push files to sFTP - (stdout) Authenticating...
2019/08/26 05:27:28 - Push files to sFTP - (stdout) Host key does not match configured key "ps8Qj1+Y5WmEKcjdH05cqfzOGCxXHa+X3lhCixestv8="!
2019/08/26 05:27:28 - Push files to sFTP - (stdout) Host key fingerprint is ssh-rsa 2048 ps8Qj1+Y5WmEKcjdH05cqfzOGCxXHa+X3lhCixestv8=.
2019/08/26 05:27:28 - Push files to sFTP - (stdout)
2019/08/26 05:27:28 - Push files to sFTP - (stdout) Authentication failed.
Как видите, ключ ssh-rsa в обоих случаях одинаковый. И если я запускаю задачу вручную из Планировщика задач, выполняю командный файл, который вызывается запланированной задачей, или если я вручную подключаюсь к серверу sFTP с помощью WinSCP с той же конфигурацией, соединение устанавливается успешно.
Это строка подключения (данные сервера отредактированы):
"c:\Program Files (x86)\WinSCP\WinSCP.com" /command "open sftp://user:pwd@secure-transfer-ftp.server.com -passive=on -timeout=500 -hostkey=ps8Qj1+Y5WmEKcjdH05cqfzOGCxXHa+X3lhCixestv8="
Есть идеи, почему он не работает, когда выполняется как запланированная задача? Единственным изменением было обновление адреса SFTP, поскольку другая сторона обновила свои IP-адреса и связанные URL-адреса, но, согласно, ключ не изменился (о чем свидетельствует тот факт, что я могу подключиться вручную)
Ваш сценарий неверен. В -hostkey
переключатель должен включать даже тип ключа и размер ключа (только в грядущей версии WinSCP 5.16 будет разрешена только контрольная сумма, но в любом случае это не рекомендуется).
Так и должно быть:
"...\WinSCP.com" /command "open ... -hostkey=""ssh-rsa 2048 ps8Qj1+Y5WmEKcjdH05cqfzOGCxXHa+X3lhCixestv8="""
Причина, по которой он работает в других средах, скорее всего, заключается в том, что ключ хоста кэшируется в реестре Windows учетной записи, которую вы используете для тестов. Так что значение из сценария даже не рассматривается. Хотя учетная запись, которая выполняет задание планировщика заданий, не имеет кешированного ключа.
Это описано в FAQ по WinSCP. Мой сценарий отлично работает при выполнении вручную, но дает сбой или зависает при запуске планировщиком Windows, SSIS или другой службой автоматизации. Что я делаю не так?