Windows Server 2012マシンで実行されるスケジュールされたタスクの一部として、WinSCPを使用して、資格情報とssh-rsaキーを使用してsFTP経由で接続します。スケジュールされたタスクが実行されると、接続は失敗し、次のエラーメッセージが表示されます。
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キーはどちらの場合も同じです。また、タスクスケジューラから手動でタスクを実行する場合、スケジュールされたタスクが呼び出すバッチファイルを実行する場合、または同じ構成でWinSCPを使用してsFTPサーバーに手動で接続する場合、接続は成功します。
これは接続文字列です(サーバーの詳細を編集):
"c:\Program Files (x86)\WinSCP\WinSCP.com" /command "open sftp://user:[email protected] -passive=on -timeout=500 -hostkey=ps8Qj1+Y5WmEKcjdH05cqfzOGCxXHa+X3lhCixestv8="
スケジュールされたタスクとして実行すると失敗する理由はありますか?唯一の変更は、相手がIPと関連するURLを更新したため、SFTPアドレスの更新でしたが、によると、キーは変更されていません(手動で接続できるという事実によって示されています)
スクリプトが間違っています。 -hostkey
switch キータイプとキーサイズも含める必要があります(今後のWinSCP 5.16でのみチェックサムのみが許可されますが、とにかく推奨されません) 。
したがって、次のようになります。
"...\WinSCP.com" /command "open ... -hostkey=""ssh-rsa 2048 ps8Qj1+Y5WmEKcjdH05cqfzOGCxXHa+X3lhCixestv8="""
他の環境で機能する理由は、おそらく、ホストキーがテストに使用するアカウントのWindowsレジストリにキャッシュされているためです。したがって、スクリプトからの値は考慮されません。タスクスケジューラジョブを実行するアカウントには、キーがキャッシュされていません。
これはWinSCPでカバーされていますFAQ 私のスクリプトは手動で実行すると正常に動作しますが、Windowsスケジューラ、SSIS、またはその他の自動化サービスで実行すると失敗またはハングします。何が問題なのですか?