我有这个简单的 Java 程序,它使用Jsch连接到 SFTP 服务器。
在 Java 1.4.2 上连接失败并出现“Auth fail”异常,但在 Java 1.7 上连接完美。
try {
JSch jsch = new JSch();
jsch.setKnownHosts(KNOWN_HOSTS_PATH);
jsch.addIdentity(PRIVATE_KEY_PATH, PASSPHRASE);
Session session = jsch.getSession(USERNAME, HOSTNAME, 22);
session.connect(2500);
Channel channel = session.openChannel("shell");
channel.setInputStream(System. in );
channel.setOutputStream(System.out);
channel.connect();
} catch (Exception e) {
e.printStackTrace(System.err);
}
我使用的钥匙是ssh-rsa 4096
位钥匙。.pub
密钥文件与私钥位于同一目录中。
连接记录器时,我在异常之前看到以下消息(发生在channel.connect();
):
信息:连接到 <redacted> 端口 22 信息:已建立连接 信息:远程版本字符串:SSH-2.0-OpenSSH_5.1p1 Debian-5 信息:本地版本字符串:SSH-2.0-JSCH-0.1.42 信息:校验密码:aes256-ctr、aes192-ctr、aes128-ctr、aes256-cbc、aes192-cbc、aes128-cbc、3des-ctr、arcfour、arcfour128、arcfour256 信息: arcfour 不可用。 信息:arcfour128 不可用。 信息:arcfour256 不可用。 信息:已发送 SSH_MSG_KEXINIT 信息:已收到 SSH_MSG_KEXINIT 信息:kex:服务器->客户端 aes128-ctr hmac-md5 无 信息:kex:客户端->服务器 aes128-ctr hmac-md5 无 信息:已发送 SSH_MSG_KEXDH_INIT 信息:期待 SSH_MSG_KEXDH_REPLY 信息:ssh_rsa_verify:签名为真 信息:主机 '<redacted>' 是已知的并且计算 RSA 主机密钥 信息:已发送 SSH_MSG_NEWKEYS 信息:收到 SSH_MSG_NEWKEYS 信息:已发送 SSH_MSG_SERVICE_REQUEST 信息:收到 SSH_MSG_SERVICE_ACCEPT INFO:可以继续的身份验证:publickey、keyboard-interactive、password INFO:下一个认证方法:publickey 信息:可以继续的身份验证:密码 INFO:下一个身份验证方法:密码 信息:从 <redacted> 端口 22 断开连接 com.jcraft.jsch.JSchException:身份验证失败 在 com.jcraft.jsch.Session.connect(Session.java:452) 在 TestJsch.main(TestJsch.java:19)
当我用 Java 1.7 运行相同的程序时,它说
信息:连接到 <redacted> 端口 22 信息:已建立连接 信息:远程版本字符串:SSH-2.0-OpenSSH_5.1p1 Debian-5 信息:本地版本字符串:SSH-2.0-JSCH-0.1.42 信息:校验密码:aes256-ctr、aes192-ctr、aes128-ctr、aes256-cbc、aes192-cbc、aes128-cbc、3des-ctr、arcfour、arcfour128、arcfour256 信息:已发送 SSH_MSG_KEXINIT 信息:已收到 SSH_MSG_KEXINIT 信息:kex:服务器->客户端 aes128-ctr hmac-md5 无 信息:kex:客户端->服务器 aes128-ctr hmac-md5 无 信息:已发送 SSH_MSG_KEXDH_INIT 信息:期待 SSH_MSG_KEXDH_REPLY 信息:ssh_rsa_verify:签名为真 信息:主机 '<redacted>' 是已知的并且计算 RSA 主机密钥 信息:已发送 SSH_MSG_NEWKEYS 信息:收到 SSH_MSG_NEWKEYS 信息:已发送 SSH_MSG_SERVICE_REQUEST INFO: SSH_MSG_SERVICE_ACCEPT receivedINFO: 可以继续的身份验证:publickey,keyboard-interactive,password INFO:下一个认证方法:publickey 信息:身份验证成功(公钥)。 Linux <redacted> 2.6.26-2-amd64 #1 SMP Mon Jun 13 16:29:33 UTC 2011 x86_64 <服务器欢迎消息如下>
我已经为 1.4 VM 安装了 Java Cryptography Extensions (JCE)。
这个问题的根源可能是什么?