通过SSH连接Windows Server 2012 R2使用signtool签名exe失败
本地代码签名正常,SSH远程执行时进程卡住无完成日志
问题现象
- 本地执行signtool签名exe文件完全成功,日志输出完整:
The following certificates were considered: Issued to: ** Issued by: ****** Expires: ****** SHA1 hash: ****** After EKU filter, 1 certs were left. After expiry filter, 1 certs were left. After Subject Name filter, 1 certs were left. After Private Key filter, 1 certs were left. The following certificate was selected: Issued to: **** Issued by: ****** Expires: ****** SHA1 hash: ****** Done Adding Additional Store Successfully signed: ntnxcollector-service.exe Number of files successfully Signed: 1 Number of warnings: 0 Number of errors: 0
- 通过SSH远程连接服务器执行相同签名操作时,日志仅输出到
Done Adding Additional Store就停止,无后续成功或错误提示:
The following certificate was selected: Issued to: **** Issued by: ** Expires: ** SHA1 hash: *** Done Adding Additional Store
已排查情况
- 调整signtool多种参数选项,问题未解决
- 本地终端执行bash脚本签名正常,仅SSH环境下出现异常
使用的命令
signtool签名命令
signtool sign /debug /a /sm /n "**" /t http://timestamp.digicert.com **.exe
SSH连接命令
ssh -o StrictHostKeyChecking=no -t WINDOWS_USER@IP
解决思路与方案
证书存储与私钥访问问题
Windows SSH远程会话默认可能未加载当前用户的完整证书存储,或私钥需要交互式验证(如密码弹窗)但无图形界面无法触发,导致进程卡住。- 操作:将证书导入本地计算机存储(而非当前用户存储);右键证书→「所有任务」→「管理私钥」,给执行签名的用户分配读取权限;若私钥带密码,在命令中添加
/p <密码>参数,或配置私钥无需交互式验证。
- 操作:将证书导入本地计算机存储(而非当前用户存储);右键证书→「所有任务」→「管理私钥」,给执行签名的用户分配读取权限;若私钥带密码,在命令中添加
环境变量差异
SSH会话的环境变量可能与本地会话不同,导致signtool无法正常定位依赖或访问资源。- 操作:在SSH会话中手动指定signtool所在路径,比如:
路径根据你的Windows SDK版本和安装位置调整。set PATH=C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64;%PATH% signtool sign /debug /a /sm /n "**" /t http://timestamp.digicert.com **.exe
- 操作:在SSH会话中手动指定signtool所在路径,比如:
时间戳服务器网络访问限制
SSH环境下可能存在防火墙或代理,导致signtool无法连接时间戳服务器http://timestamp.digicert.com,进程卡在等待响应。- 操作:在SSH会话中用
curl http://timestamp.digicert.com测试网络连通性;若无法访问,检查服务器防火墙规则,或更换为其他可用时间戳服务器。
- 操作:在SSH会话中用
输出与静默模式调整
部分signtool版本在远程会话中可能因交互式输出逻辑卡住,尝试静默模式或重定向输出排查。- 操作:添加
/q参数启用静默模式:
或重定向输出到文件查看完整日志:signtool sign /q /debug /a /sm /n "**" /t http://timestamp.digicert.com **.exesigntool sign /debug /a /sm /n "**" /t http://timestamp.digicert.com **.exe > sign_result.log 2>&1
- 操作:添加
内容的提问来源于stack exchange,提问作者Ajinkya
相关产品推荐
相关产品推荐

