json - 'curl: option -----END: is unknown' 使用 curl 将公钥上传到 jenkins SSH 凭证
问题描述
我正在尝试使用此 curl 命令将私钥上传到 Jenkins SSH 凭据:
JENKINS_PRIVATE_KEY_AS_STRING='-----BEGIN RSA PRIVATE KEY----- MIIEo...2qwu8diE -----END RSA PRIVATE KEY-----'
curl -H $CRUMB -X POST "http://$USER:$API_TOKEN@$JENKINS_HOST/credentials/store/system/domain/_/createCredentials" \
--data-urlencode "json={
"": "0",
"credentials": {
"scope": "GLOBAL",
"id": "jenkins-ssh",
"username": "jenkins",
"password": "",
"privateKeySource": {
"stapler-class": "com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey$DirectEntryPrivateKeySource",
"privateKey": "$JENKINS_PRIVATE_KEY_AS_STRING",
},
"description": "jenkins-ssh-credentials",
"stapler-class": "com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey"
}
}"
但是当我运行上面它失败了:
curl: option -----END: is unknown
curl: try 'curl --help' or 'curl --manual' for more information
为什么变量中的字符串会$JENKINS_PRIVATE_KEY_AS_STRING
导致错误,我该如何解决?
基于以下答案,我也尝试过:
curl -H $CRUMB -X POST "http://$USER:$API_TOKEN@$JENKINS_HOST/credentials/store/system/domain/_/createCredentials" \
--data-urlencode "json={
\"\": \"0\",
\"credentials\": {
\"scope\": \"GLOBAL\",
\"id\": \"jenkins-ssh\",
\"username\": \"jenkins\",
\"password\": \"\",
\"privateKeySource\": {
\"stapler-class\": \"com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey$DirectEntryPrivateKeySource\",
\"privateKey\": \"$JENKINS_PRIVATE_KEY_AS_STRING\",
},
\"description\": \"jenkins-ssh-credentials\",
\"stapler-class\": \"com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey\"
}
}"
但这给出了错误:
: Specified type class com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey is not assignable to the expected class com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey$PrivateKeySource
at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:671)
Caused: java.lang.IllegalArgumentException: Failed to instantiate class com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey$PrivateKeySource from {"stapler-class":"com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey","privateKey":"-----BEGIN RSA PRIVATE KEY----- MIIEo...2qwu8diE -----END RSA PRIVATE KEY-----"}
at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:680)
at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:478)
at org.kohsuke.stapler.RequestImpl.instantiate(RequestImpl.java:777)
Caused: java.lang.IllegalArgumentException: Failed to convert the privateKeySource parameter of the constructor public com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey(com.cloudbees.plugins.credentials.CredentialsScope,java.lang.String,java.lang.String,com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey$PrivateKeySource,java.lang.String,java.lang.String)
但不确定它与卷曲部分有关。
解决方案
您需要修复参数引用:
v
--data-urlencode "json={
"": "0",
^
相反,转义"
出现在参数字符串中的字符:
--data-urlencode "json={
\"\": \"0\",
[...]
推荐阅读
- mysql - 如何遍历一个表并根据另一个表中的数据更新字段?
- reactjs - React hooks - 当对象集合中的嵌套属性更改时触发 useEffect
- python - 熊猫重新采样将周末拉到周五
- html - Safari 音频图标
- python-3.x - 是否有一个选项可以在发生错误后通过 try-except 返回到外部循环?
- python - pytorch 嵌入索引超出范围
- c# - 有效地对 N 个字节数组求和
- c# - Windows 服务上的 RabbitMQ 多个唯一消费者
- c# - 为什么在 C# 中我们不能评估三元运算符中的方法?
- dart - 如何在颤动中动态设置根视图?