Spring Cloud Config Server连接Bitbucket SSH报Base64非法字符2d错误
Spring Cloud Config SSH连接Bitbucket仓库报错排查
配置信息
spring.cloud.config.server.git.uri=git@prod-cvs2.test.com:7999/properties.git spring.cloud.config.server.git.ignoreLocalSshSettings=true spring.cloud.config.server.git.hostKey=prod-cvs2.test.com spring.cloud.config.server.git.hostKeyAlgorithm=ssh-rsa spring.cloud.config.server.git.strictHostKeyChecking=false spring.cloud.config.server.git.passphrase=Secret123 spring.cloud.config.server.git.privateKey=-----BEGIN RSA PRIVATE KEY-----\n\ Proc-Type: 4,ENCRYPTED\n\ DEK-Info: AES-128-CBC,947ABEEB0FE4132D7074662CE7FF5068\n\ \n\ THE_KEY\n\ -----END RSA PRIVATE KEY----- spring.cloud.config.server.git.default-label=master
错误日志
Caused by: org.apache.sshd.common.SshException: DefaultConnectFuture[git@prod-cvs2.test.com/162.134.121.63:22]: Failed (IllegalArgumentException) to execute: Illegal base64 character 2d at org.apache.sshd.common.future.AbstractSshFuture.lambda$verifyResult$1(AbstractSshFuture.java:131) ~[sshd-osgi-2.7.0.jar:2.7.0] at org.apache.sshd.common.future.AbstractSshFuture.formatExceptionMessage(AbstractSshFuture.java:185) ~[sshd-osgi-2.7.0.jar:2.7.0] at org.apache.sshd.common.future.AbstractSshFuture.verifyResult(AbstractSshFuture.java:130) ~[sshd-osgi-2.7.0.jar:2.7.0] at org.apache.sshd.client.future.DefaultConnectFuture.verify(DefaultConnectFuture.java:42) ~[sshd-osgi-2.7.0.jar:2.7.0] at org.apache.sshd.client.future.DefaultConnectFuture.verify(DefaultConnectFuture.java:34) ~[sshd-osgi-2.7.0.jar:2.7.0] at org.eclipse.jgit.transport.sshd.SshdSession.connect(SshdSession.java:191) ~[org.eclipse.jgit.ssh.apache-5.13.1.202206130422-r.jar:5.13.1.202206130422-r] at org.eclipse.jgit.transport.sshd.SshdSession.connect(SshdSession.java:142) ~[org.eclipse.jgit.ssh.apache-5.13.1.202206130422-r.jar:5.13.1.202206130422-r] at org.eclipse.jgit.transport.sshd.SshdSession.connect(SshdSession.java:99) ~[org.eclipse.jgit.ssh.apache-5.13.1.202206130422-r.jar:5.13.1.202206130422-r] at org.eclipse.jgit.transport.sshd.SshdSessionFactory.getSession(SshdSessionFactory.java:235) ~[org.eclipse.jgit.ssh.apache-5.13.1.202206130422-r.jar:5.13.1.202206130422-r] ... 136 common frames omitted Caused by: java.lang.IllegalArgumentException: Illegal base64 character 2d at java.base/java.util.Base64$Decoder.decode0(Base64.java:743) ~[na:na] at java.base/java.util.Base64$Decoder.decode(Base64.java:535) ~[na:na] at java.base/java.util.Base64$Decoder.decode(Base64.java:558) ~[na:na] at org.apache.sshd.common.config.keys.PublicKeyEntryDataResolver.decodeEntryKeyData(PublicKeyEntryDataResolver.java:53) ~[sshd-osgi-2.7.0.jar:2.7.0] at org.apache.sshd.common.config.keys.PublicKeyEntry.parsePublicKeyEntry(PublicKeyEntry.java:408) ~[sshd-osgi-2.7.0.jar:2.7.0] at org.apache.sshd.common.config.keys.AuthorizedKeyEntry.parseAuthorizedKeyEntry(AuthorizedKeyEntry.java:318) ~[sshd-osgi-2.7.0.jar:2.7.0] at org.apache.sshd.common.config.keys.AuthorizedKeyEntry.parseAuthorizedKeyEntry(AuthorizedKeyEntry.java:273) ~[sshd-osgi-2.7.0.jar:2.7.0] at org.springframework.cloud.config.server.ssh.PropertyBasedSshSessionFactory$2.getHostKey(PropertyBasedSshSessionFactory.java:151) ~[spring-cloud-config-server-3.1.5.jar:3.1.5] at org.springframework.cloud.config.server.ssh.PropertyBasedSshSessionFactory$2.lookup(PropertyBasedSshSessionFactory.java:122) ~[spring-cloud-config-server-3.1.5.jar:3.1.5] at org.eclipse.jgit.internal.transport.sshd.JGitServerKeyVerifier.lookup(JGitServerKeyVerifier.java:72) ~[org.eclipse.jgit.ssh.apache-5.13.1.202206130422-r.jar:5.13.1.202206130422-r] at org.eclipse.jgit.internal.transport.sshd.JGitClientSession.resolveAvailableSignaturesProposal(JGitClientSession.java:275) ~[org.eclipse.jgit.ssh.apache-5.13.1.202206130422-r.jar:5.13.1.202206130422-r] at org.apache.sshd.common.session.helpers.AbstractSession.resolveAvailableSignaturesProposal(AbstractSession.java:2356) ~[sshd-osgi-2.7.0.jar:2.7.0]
问题分析
错误核心是Illegal base64 character 2d,ASCII码2d对应字符-,说明系统尝试对包含-的内容做Base64解码时失败。问题出在spring.cloud.config.server.git.hostKey配置项:
当前配置的hostKey=prod-cvs2.test.com是服务器主机名,但该配置项要求填写Bitbucket服务器SSH公钥的Base64编码部分,而非主机名。系统将主机名当作公钥Base64内容解码,因包含-字符触发错误。
解决方案
1. 获取正确的Bitbucket服务器SSH公钥
在本地终端执行命令获取服务器SSH公钥:
ssh-keyscan prod-cvs2.test.com 2>/dev/null | grep ssh-rsa
执行结果示例:
prod-cvs2.test.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...
2. 修改hostKey配置
将spring.cloud.config.server.git.hostKey的值替换为上述结果中ssh-rsa之后的Base64部分(即AAAAB3NzaC1yc2EAAAADAQABAAABAQC...这段,不含主机名和ssh-rsa前缀)。
3. 可选简化配置
若不需要校验主机密钥,可直接移除hostKey和hostKeyAlgorithm配置项,保留已设置的strictHostKeyChecking=false,系统会自动跳过密钥校验,也能避免该错误。
修改后的配置示例(使用正确hostKey):
spring.cloud.config.server.git.uri=git@prod-cvs2.test.com:7999/properties.git spring.cloud.config.server.git.ignoreLocalSshSettings=true spring.cloud.config.server.git.hostKey=AAAAB3NzaC1yc2EAAAADAQABAAABAQC... spring.cloud.config.server.git.hostKeyAlgorithm=ssh-rsa spring.cloud.config.server.git.strictHostKeyChecking=false spring.cloud.config.server.git.passphrase=Secret123 spring.cloud.config.server.git.privateKey=-----BEGIN RSA PRIVATE KEY-----\n\ Proc-Type: 4,ENCRYPTED\n\ DEK-Info: AES-128-CBC,947ABEEB0FE4132D7074662CE7FF5068\n\ \n\ THE_KEY\n\ -----END RSA PRIVATE KEY----- spring.cloud.config.server.git.default-label=master
同时注意privateKey中的换行符\n\需确保私钥内容能被正确解析。
内容的提问来源于stack exchange,提问作者Sweta Sharma
相关产品推荐
相关产品推荐

