Вопрос или проблема
Запланирована задача по отправке файлов через команду psftp (psftp -bc -v -P 22 -l username -pw password -b upload220506.ftp ftpsitename) на сервере Windows. Она уже закеширована путем запуска exe файла вручную из командной строки от имени администратора. Первый файл был успешно передан через задачу, а передача второго файла не удалась, и в журнале видно следующее сообщение. Как избежать этой проблемы при отправке нескольких файлов?
Используется Диффи-Хеллман с стандартной группой “group14”
Выполняется обмен ключами Диффи-Хеллмана с хешированием SHA-1
Ключ хоста сервера не сохранен в реестре. У вас нет гарантии, что сервер является тем компьютером, о котором вы думаете.
Отпечаток ключа rsa2 сервера:
ssh-rsa 2048
Если вы доверяете этому хосту, введите “y”, чтобы добавить ключ в кэш PuTTY и продолжить соединение.
Если вы хотите продолжить соединение только один раз, не добавляя ключ в кэш, введите “n”.
Если вы не доверяете этому хосту, нажмите Enter, чтобы отказаться от соединения.
Сохранить ключ в кэше? (y/n)
Это может быть полезным:
C:\putty\psftp.exe -i C:\connections\FTP\remote-server.ppk myuser@remote-server -batch -bc -be -b C:\putty\upload.txt -hostkey 39:e4:84:b2:6f:bc:87:04:1f:21:bf:32:83:79:0b:cf
Ответ или решение
Теория (Theory):
Когда вы используете PSFTP для передачи файлов, сервер использует ключ хоста для идентификации и обеспечения безопасного соединения. При первом подключении к новому серверу PSFTP попросит вас подтвердить доверие к этому серверу, сохранив его ключ в реестре. Это предотвращает возможность MITM-атаки (атака "человек посередине"), где злонамеренный сервер может попытаться перехватить ваши данные.
При этом возникновение сообщения об отсутствии ключа в реестре часто связано с тем, что PSFTP не может найти ключ, когда работа выполняется в запланированном задании, даже если он был кэширован вручную. Это может означать, что ключ не правильно сохраняется в контексте выполнения заданий планировщика, либо при передаче второго файла изменяется сеанс, и ключ не обнаруживается.
Пример (Example):
Ваша ошибка, заключающаяся в отсутствии ключа хоста в реестре, описывается следующим образом: когда задание было выполнено, и первый файл был успешно передан, последующие передачи не видели ключа в реестре, что привело к необходимости повторного подтверждения доверия. Это может происходить из-за некорректных настроек среды выполнения, где PSFTP не имеет доступа к кешу реестра.
Применение (Application):
Чтобы избежать этой проблемы, вы можете использовать параметр -hostkey
, который явно указывает PSFTP доверять определенному ключу хоста. Это позволяет избежать интерактивного подтверждения и делает процесс автоматизированным. Пример использования параметра:
psftp.exe -i C:\connections\FTP\remote-server.ppk myuser@remote-server -batch -bc -be -b C:\putty\upload.txt -hostkey 39:e4:84:b2:6f:bc:87:04:1f:21:bf:32:83:79:0b:cf
Этот параметр обеспечивает специфическое указание PSFTP, что ключ указанного сервера безопасен. Если у вас уже есть серверный ключ (его отпечаток), вы можете добавить его в команду задания, как показано выше.
Кроме того, убедитесь, что задание, выполняющее скрипт PSFTP, записывает лог выполнения, чтобы упростить диагностику в случае дальнейших сбоев. Используйте режим -batch
, который предотвращает попроцессную остановку для ручного ввода, усиливая автоматичность выполнения задач.