我有一个网络表单,允许用户发布私钥、主机名、用户名,它允许我使用私钥通过 ssh 连接到“主机名”并运行测试命令。
我正在使用 golang 和 ssh 包进行这个测试。
是的,我知道通过表单发送私钥的危险,但这对我来说是一个内部项目,不会真正公开使用。
所以,继续,这就是我的代码的样子
func setupSSHConfigWithKey(user string, pkey string) *ssh.ClientConfig {
pkey_bytes := []byte(pkey)
// parse the key
signer, err := ssh.ParsePrivateKey(pkey_bytes)
if err != nil {
panic(err)
}
这段代码运行时,会导致如下错误
2019/11/15 23:57:14 http: 恐慌服务 [::1]:62783: asn1: 语法错误: 数据被截断
奇怪的是,如果我使用 阅读自己的“id_rsa.pub” io/ioutil
,则不会发生错误。但只有当我粘贴“id_rsa.pub”文件的内容时才会发生此错误。
我不知道为什么会发生这种情况,我不知道如何解决它。
我检查了 id_rsa.pub 文件内容的字节数组输出以及表单值,它们都相同且长度相同。
我怀疑错误来自https://golang.org/src/encoding/asn1/asn1.go
所以我试图更深入地研究如何解决这个问题,但到目前为止还没有想出太多。
在这里询问我如何解决此错误。
编辑:
今天早上我一直在研究更多,发现了一些更有趣的结果
如果我运行以下代码,我不会收到任何错误。但是,如果我将下面的私钥字符串发布到 Web 表单中,然后使用下面的相同代码但使用 http 请求 FormValue 而不是仅仅声明一个字节切片,我会得到上面提到的 asn1 错误。下面的示例是一个测试密钥。
package main
import (
"log"
"encoding/pem"
"crypto/x509"
)
func main() {
pkey_bytes := []byte(`-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAv+B+qNevh/iaPmWAnulN5flRatGo6V97CjbJ7P2tp0YuiI+O
zCXcoY7Mmv4sDbZicBrtbIvi3l3hKqhbV+1ArhwPmoEem3M9yM1goZqoE6mh5Wst
zlVOAx1HjfFNYteV3TPpIb8S+5q5vEXguYv/oBmCv44Jjf4wuvGHjbX6vJg8VT4q
sG5uF74h59+nOOAsox2BQ7wK24ccfZBIl+O/L5juSJWnVJYOoaddJ9fiEB2JqKYQ
443ZOqwml6Vu0ZeSX3AuqtiSQiDSI+AAX62YtBeza4CzUnYTQIA2HV5/wfp2tFk3
sP9FjOPENqr6jQjcdPjtgNK+Sd00UI823Q288wIDAQABAoIBAFuiGJsFtjxXS0I1
M0Gw5ZTIhktfKS2afaYZGEHnvEDAUYTCGk4AXueAzNHQRLWfvk8PbQeDnqrXZqr6
j/TjxxnfKMx+kWFnncAB5P4IX/BT+I8Zqlx5fLIcD4oIDQ8BKf7jxZhqKeSitcTm
EjZKV5/bzwcwC/wVwqvkoPnaSI47ycCmXUj88ccZGfItOzoFYEbQ2yI1cMJ2sfBU
8PkvPzm0IB63L6BixdC2b+2jyoOCadF6VTRRh53BNH6WcyTBFy2CC6VwXajWh5KD
z5HUTcsUfb+nsZjQdmJjmObdQxvjqpjwlnW9XmNaF9EMjwioiljrgzH0nYSiJOk3
4cfvTLECgYEA6kW8HKipGN/R2lXy3QtQxyrNxg1IhbVhGbQGtIy5HTLyj+7UgyQW
xhT0miRHAbEqjFMqd8dpruKFq+PxVzDiJpExac7LzwCfNgywqlg6lzowD5tB9QYm
Bgw7y8EySMHruMd0LgDXTeXNV2eScbzuwQY6h2wDeA6X99Q4zVakWoUCgYEA0awt
DfyQKQhkrB4YMdmquseouVbN7XyX3YeanRKbpyHWwnGUIqOLv0lYxDDubnxz9+uG
cD15gps3CE5aQGaNDEgCuPRb6hDN66bN83QW7Lz5USrP95lczTvoMKA1OpLKUzpT
8IaGMYZEjCjamVut6u7Vub6yt09pNpGpvHMdnxcCgYEAwR4LG3TNL/wQ+XKwaRbS
19upFQIOLmp+SLnmbR8z2aYN3ih6dkBhpZfQquAMyJBLCrHj6CkyLT/+ANw+LinV
wwUdPqOBznosxFlhqIpighctVzAdBuayoXmkMSppUSDKN9/zHZkD4ur0goCWb7vW
9Lc1uDyJ/4XIMDt5N4ucoCECgYEAlr9yuT6gK1BEiVct0BGOZbINRgv6DMhqq7TG
Xi41yQlUTgK5Hdp2LDbA4nXHx5olCtfElcgtJ9EO1SL4Upsox+6yPmY5+2TPmKEa
K/KIVPddTZU5ZuxVw51RyDw3aQCHBSXHmgQuUUcW26q32FEJDwNemKhZ99/ZZol9
/ubJIksCgYA9OyXSqXcylevH51xujT99/21pfOjurYqKYWTpcrmq5vuatD++aQim
6ENMubkz3mNvma8nByzjPwfFBDIZcBPo2f412bvXbrlUPGs6sWIXQVAbCDesf1Lp
xUTpA9+55L6UtElwdcKyfwwGlXNkwwOUhF0T7XJuCn1s0CSVJD7YsA==
-----END RSA PRIVATE KEY-----`)
log.Println(pkey_bytes)
block, _ := pem.Decode(pkey_bytes)
log.Println("Block: " + block.Type)
log.Println(block.Headers)
log.Println(block.Bytes)
_, err := x509.ParsePKCS1PrivateKey(block.Bytes)
if err != nil {
log.Println(err)
}
}
输出
2019/11/16 11:04:11 块:RSA 私钥 2019/11/16 11:04:11 map[] 2019/11/16 11:04:11 [48 130 4 164 2 1 0 2 130 1 1 1 0 213 0 152 15 73 240 7 87 162 114 194 234 45 84 130 9 85 7 95 176 198 251 169 58 203 163 163 2 192 75 109 2009 2009 2009 200 120 120 120 10 195 37 24 24 189 125 27 54 78 217 229 189 64 207 138 199 49 49 255 180 125 75 93 0 220 132 212 212 214 37 43 19 181 144 89 80 37 80 37 163 12 242 194 170 170 155 234 155 234 155 234 172 185 234 172 185 177 1 186 48 191 174 238 204 193 75 215 5 123 138 177 67 43 126 102 153 69 24 25 240 148 141 236 52 29 160 204 122 172 71 71 66 43 8 167 19 218 153 141 113 31 226 169 118 180 18 172 244 178 151 211 253 82 203 3 46 145 77 142 223 2 46 248 248 251 164 251 24 120 120 127 82 127 82 13 250 162 162 162 162 162 55 143 120 88 51 102 11 170 180 180 181 181 181 181 181 181 89 224 224 224 224 69 148 93 253 253 253 253 246 146 146 1111111111 77 211 202 63 159 52 255 29 248 148 41 237 159 120 25 40 204 241 39 154 123 146 79 77 196 221 167 16 42 24 224 244 245 1981 244 2451173 159 118 135 93 205 190 52 100 11 94 6 76 76 76 73 35 166 197 123 35 112 120 152 220 174 217 122 10 94 51 210 157 2 3 1 0 1 0 1 2 130 1 0 63 2 130 1 0 63 218 318 3 187 144 192 192 194 182 194 182 194 182 129 236 136 66 186 120 152 207 146 124 79 3 247 97 13 173 9 218 195 70 89 76 165 31 164 204 52 20 105 178 132 159 50 150 186 26 249 156 66 134 108 126 240 168 108 226 219 56 62 122 234 135 13 216 196 174 214 247 61 177 25 42 148 204 140 28 215 86 133 65 205 41 46 35 237 128 52 70 117 156 25 12 253 37 188 223 157 26 130 28 60 193 82 191 113 14 212 151 111 216 38 212 129 142 243 56 134 129 133 172 171 89 99 46 127 83 134 146 26 181 142 57 186 249 145 17 157 39 253 37 185 230 25 132 162 59 175 136 187 215 251 176 75 70 231 253 19 86 147 106 158 52 100 193 231 203 249 119 254 33 194 240 113 92 131 187 65 89 90 63 126 83 225 56 177 211 137 74 155 220 177 104 203 106141 183 150 24 159 123 222 222 229 107 222 168 41 55 0 84 192 173 69 177 227 134 196 27 39 90 28 88 138 138 138 124 159 56 254 111 5911 59 114 160 217 114 160 217 10 253 207 253 207 253 207 183 225 66 217 13 47 186 90 186 90 254 82 21 59 221 171 240 13 106 34 134 168 235 62 1 2 129 129 129 0 249 28 59 180 159 49 111 179 128 82 9 178 195 195 195 199 223 223 246 246 246 255 34 136 248 187 248 187 226 226 226 183 80 182 27 16 247 199 134 108 140 13 31 158 127 210 210 45 172 1828 252 82 60 230 230 2231 100 136 5 31 164 246 0 178 127 59 59 211 211 245 219 50 191 134 134 134 178 103 113 113 113 109 238 106 238 106 238 106 44 249 124 155 149 124 155 140 155 140 155 140 184 166 158 74 58 176 8 155 3 108 105 124 106 66 66 66 251 146 173 197 195 250 250 183 168 87 244 200 19 64 10 184 10 184 94 94 172 74 172 74 100 187 79 79 201 188 22 228 180 240 239 129 76 1 58 133 168 65 115 237 70 128 13 179 229 144 56 82 154 92 97 137 196 61 152 41 186 145 8 61 511 23 201 102 28 119 6 147 133 36 186 157 169 120 245 81 81 249 172 104 93 98 96 86 54 231 122 205 178 44 147 165 6 87 105 242 179 191 230 166 112 57 244 148 153 204 219 173 143 194 71 182 77 29 112 82 132 68 8 183 178 169 200 138 216 46 65 49 37 37 214 96 198 78 184 78 184 71 120 145 89 7 138 138 138 134 134 134 134 236 157 132 36 173 17 93 179 93 153 153 152 152 171 225 193 29 129 129 129 129 129 129 0 142 142 142 142 141 32 32 32 129 128 227 170 87 30 228 86 112 0 173 222 158 79 207 244 111 218 28 167 194 56 84 79 236 75 220 245 220 245 110 90 90 253 143 143 243 241 38 180 113 180 113 4 133 4 133 134 134 134 134 134 134 80 184 80 18 97 113 97 113 97 113 230 161 161 63 41 235 72 123 78 75 212 36 80 248 248 236 151 113 99 62 4 151 140 232 117 15 12 197 69 211 143 143 143 143 179 220 220 106 132 23 199 106 106 106 106 101 66 101 68 140 40 40 40 40 4 199 229 237 237 142 237 142 242 242 242 242 242 242 242 242 242 242 2391 111 111 239111 111 111 239111 111 111 239111 111 111 239 198 47 88 125 228 12 88 6 138 112 234 199 199 130 147 73 218 88 126 177 143 55 190 182 37 2 129 128 21 17 150 104 234100 163 144 42 181 218 176 18 28 112 128 186 208 233 233 243 171 184 39 171 100 168 1 255 123 185 232 127 53 47 202 96 122 245 163 163 162 113 194 194 194 108 72 144 108 72 144 116 117 244 117 224 110 224 110 224 110 8 14 191 185 44 999 999999999999999999999999999999999999999999999999. 15 57 252 211 207 141 16 64 228 57 110 44 160 35 161 202 254 138 38 5 55 32 28 238 128 175 59 37 197 132 137 170 126 89 171 10 6 57 22 45 184 64 167 80 213 229 253 216 97 47 245 56 161 51 19 142 3 79 114 110 94 225 198 160 146 171 118 16 112 76 69 159 1 2 129 129 0 146 125 104 230 161 38 131 49 43 63 55 120 162 242 9 135 203 88 233 46 53 10 163 157 198 66 1 219 141 142 207 126 139 42 195 107 199 104 199 104 186 220 78 164 72 177 193 221 221 223 223 223 241 16 35 22 28 181 75 118 169 34 85 169 34 85 169 230 230 97 123 206 123 206 206 82 206 82 193 218 211 182 243 182 255 68 187 187 181 187 181 187 181 181 181 181 181 181 181 181 181 181 181 181 181 251 91 49 173 252 90 238 197 197 128 105 43 172 25 253 136 160 24 125 161 54 134 125 180 69 87 64 3 87 123 16 219 67 6225 146 87 18 185 182 66 87 60 43 77 185 109 44 123 29 202 80 97 210 159]