SSH与SCP正常但Ant部署失败:无效私钥问题求助
问题原因及解决方法
核心原因
- 你使用的Ant依赖的JSch库版本过低,不支持新版OpenSSH格式的私钥(即开头为
-----BEGIN OPENSSH PRIVATE KEY-----的密钥)。本地SSH/SCP客户端是系统自带的,支持新格式,但Ant的sshexec任务依赖的JSch库无法识别该格式,导致加载密钥失败,抛出invalid privatekey错误。 - 同事能正常操作,大概率是他们的私钥为旧RSA格式(开头
-----BEGIN RSA PRIVATE KEY-----),或者其Ant环境中的JSch版本支持新格式。
解决方法
方法1:转换私钥为旧RSA格式
在本地终端执行以下命令,将现有私钥转换为JSch兼容的旧格式:
ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
执行时会提示输入原私钥密码(若有设置),之后可设置新密码或直接回车保留原密码。转换完成后,私钥开头会变为-----BEGIN RSA PRIVATE KEY-----,JSch即可正常加载。
方法2:升级JSch依赖包
找到Ant安装目录下的lib文件夹,替换其中的jsch.jar为支持OpenSSH格式的新版本(推荐JSch 0.1.55及以上):
- 删除旧的
jsch.jar文件 - 下载新版JSch jar包,放入
lib目录 - 重新执行Ant部署任务
方法3:指定密钥类型(版本适配前提下)
若你的Ant版本支持,可在sshexec配置中添加keytype参数指定密钥类型:
<sshexec host="${scp.hostname}" username="${scp.user}" keyfile="${scp.keyfile}" keytype="rsa" trust="true" command="mkdir -p ${projects.home}/${project.name}/${target.dir}" />
注:此方法需Ant和JSch版本均支持该参数,优先推荐前两种方法。
内容的提问来源于stack exchange,提问作者Tanu
相关产品推荐
相关产品推荐

