web-dev-qa-db-ja.com

ホストssh-rsaキーは、スケジュールされたタスクに接続するときにWinSCPによって拒否されますが、手動で起動された場合は拒否されません

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アドレスの更新でしたが、によると、キーは変更されていません(手動で接続できるという事実によって示されています)

1
ososxe

スクリプトが間違っています。 -hostkey switch キータイプとキーサイズも含める必要があります(今後のWinSCP 5.16でのみチェックサムのみが許可されますが、とにかく推奨されません)

したがって、次のようになります。

"...\WinSCP.com" /command "open ... -hostkey=""ssh-rsa 2048 ps8Qj1+Y5WmEKcjdH05cqfzOGCxXHa+X3lhCixestv8="""

他の環境で機能する理由は、おそらく、ホストキーがテストに使用するアカウントのWindowsレジストリにキャッシュされているためです。したがって、スクリプトからの値は考慮されません。タスクスケジューラジョブを実行するアカウントには、キーがキャッシュされていません。

これはWinSCPでカバーされていますFAQ 私のスクリプトは手動で実行すると正常に動作しますが、Windowsスケジューラ、SSIS、またはその他の自動化サービスで実行すると失敗またはハングします。何が問題なのですか?

1
Martin Prikryl