我的任务是将Tomcat / Jenkins安装从已弃用的(现在已在Yosemite中删除)SystemStarter框架移至launchd。它作为一个" build"发布并运行良好。用户,除了一件事。我们构建过程的一部分涉及调用" security"命令操纵钥匙串。这失败如下:
security: cert import failed: write permissions error
security: problem decoding
如果我进入构建机器并从命令提示符启动Tomcat,通过bin / startup.sh,那么对security
的调用不会抱怨。它只会在我通过launchd启动Tomcat时抱怨。我的plist看起来像这样:
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.apache.tomcat</string>
<key>UserName</key>
<string>builduser</string>
<key>WorkingDirectory</key>
<string>/Users/builduser</string>
<key>Program</key>
<string>/Users/builduser/bin/tomcat.sh</string>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<true/>
</dict>
<key>EnvironmentVariables</key>
<dict>
<key>CATALINA_HOME</key>
<string>/Users/builduser/Tomcat</string>
<key>CATALINA_OPTS</key>
<string>-Djava.awt.headless=true</string>
<key>JAVA_OPTS</key>
<string>-Xmx1024m -XX:MaxPermSize=512m</string>
</dict>
</dict>
</plist>
plist位于/ Library / LaunchDaemons中,而tomcat.sh只是一个启动tomcat的包装器,然后等待进程死亡。
答案 0 :(得分:3)
我自己也遇到过类似问题 - 我正在使用
解码.mobileprovision
文件
cmd -D -i <path_to_file>
一切都在本地和SSH上运行,但是从Python应用程序执行的是security: cert import failed: write permissions error
我发现this walkaround似乎是同一个问题,他们最终创建了临时keychain
并在security
命令中使用它:
cmd -D -k <specific_keychain> -i <path_to_file>
我不能100%确定这是否是这个问题的正确解决方案,但它确实运作良好。
答案 1 :(得分:0)
我也遇到过这个问题,经过进一步的检查,我在机器上使用的钥匙串与通过ssh运行的钥匙串以及我的应用程序之间似乎有一个混合。
在尝试之前,请运行var fso, objet;
fso = new ActiveXObject("Scripting.FileSystemObject");
function createNewFile(){
objet = fso.CreateTextFile("C:/monfichier.txt", true);
fso=null;
}
并检查您所期望的钥匙串是否正在使用。如果不是,您可以在Dariusz的答案中使用-k标志传递正确的一个。它也可能是钥匙串腐败问题,因此您可以尝试重置或修复钥匙串。
请记住security default-keychain
和~/Library/Keychains
答案 2 :(得分:0)
如果您的钥匙串具有配置管理功能(ansible / chef / etc) 另一个解决方案是重置钥匙串/删除“损坏的”钥匙串并使用新的钥匙串。