SSIS 2016通过WinSCP执行SFTP任务报错及无主机密钥连接问题
解决SSIS 2016 + WinSCP SFTP的“Process exit code was 0 while expecting 1”错误
我来帮你搞定这个问题,咱们先理清楚根源,再一步步解决:
问题本质
你遇到的两个现象——WinSCP.com弹出主机密钥确认提示,以及SSIS报错“Process exit code was 0 while expecting 1”,其实是同一个问题导致的:
- WinSCP在脚本模式下不支持交互式的主机密钥确认弹窗,当脚本里没明确处理密钥验证时,WinSCP会直接终止连接,返回的退出码是0(但你的SSIS任务预期成功退出码是1),所以触发了错误提示。
- 那个弹窗里的提示已经给了关键线索:“In scripting, you should use a -hostkey switch”,也就是脚本里必须用
-hostkey参数来指定主机密钥。
具体解决方案
方法1:指定主机密钥(推荐,安全合规)
这是生产环境的标准做法,步骤如下:
- 获取主机密钥指纹:
- 打开WinSCP图形界面,手动连接一次目标SFTP服务器,在弹出的“主机密钥确认”窗口中,复制完整的密钥指纹(格式类似
ssh-rsa 2048 AA:BB:CC:...)。 - 或者在WinSCP.com里执行
open sftp://user:password@server:22,在弹出的提示文本里也能找到密钥指纹。
- 打开WinSCP图形界面,手动连接一次目标SFTP服务器,在弹出的“主机密钥确认”窗口中,复制完整的密钥指纹(格式类似
- 修改WinSCP脚本:
在open命令后添加-hostkey参数,把你复制的指纹填进去:option batch abort option confirm off open sftp://user:password@server:22 -hostkey="ssh-rsa 2048 AA:BB:CC:DD:EE:FF:GG:HH:II:JJ:KK:LL:MM:NN:OO:PP" close exit
方法2:临时跳过密钥验证(仅测试环境用)
如果是测试环境,想快速验证连接,可以用通配符*跳过所有主机密钥验证,但生产环境绝对禁止这么做(会暴露中间人攻击风险):
option batch abort option confirm off open sftp://user:password@server:22 -hostkey="*" close exit
调整SSIS任务的退出码设置
最后别忘了修正SSIS里的任务配置:
打开你的Execute Process Task,找到SuccessValue属性,把它从1改成0——因为WinSCP执行成功时的退出码是0,SSIS任务需要匹配这个值才能判定任务成功。
这样调整后,WinSCP脚本不会再弹出确认提示,SSIS任务也能正确识别连接成功的状态了。
内容的提问来源于stack exchange,提问作者Al Jam
相关产品推荐
相关产品推荐

