mina-sshd 2.9.2使用arcfour256算法连接设备异常求助
解决mina-sshd 2.9.2连接arcfour256算法时的异常问题
问题现象
- 将mina-sshd客户端配置为仅启用
arcfour256算法后,连接mina-sshd服务端触发异常;使用mina-sshd客户端连接仅支持arcfour256的设备时同样异常,但Xshell等工具直接连接正常。 - 使用
arcfour128及更高安全等级算法时,mina-sshd组件可正常建立连接。 - 切换目标设备的OpenSSH版本(5.3、7.4)及不同网段设备,使用arcfour256通过mina-sshd连接均失败。
异常栈信息
Exception in thread "main" org.apache.sshd.common.SshException: [ssh-connection]: Failed (IllegalArgumentException) to execute: Bad arguments at org.apache.sshd.common.future.AbstractSshFuture.lambda$verifyResult$2(AbstractSshFuture.java:146) at org.apache.sshd.common.future.AbstractSshFuture.formatExceptionMessage(AbstractSshFuture.java:206) at org.apache.sshd.common.future.AbstractSshFuture.verifyResult(AbstractSshFuture.java:145) at org.apache.sshd.client.future.DefaultAuthFuture.verify(DefaultAuthFuture.java:56) at org.apache.sshd.client.future.DefaultAuthFuture.verify(DefaultAuthFuture.java:35) at org.apache.sshd.common.future.VerifiableFuture.verify(VerifiableFuture.java:121) at sshTools.SshClientTool.createConnect(SshClientTool.java:213) at sshTools.SshClientTool.main(SshClientTool.java:70) Caused by: java.lang.IllegalArgumentException: Bad arguments at javax.crypto.Cipher.update(Cipher.java:1941) at org.apache.sshd.common.cipher.BaseCipher.update(BaseCipher.java:122) at org.apache.sshd.common.session.helpers.AbstractSession.decode(AbstractSession.java:1644) at org.apache.sshd.common.session.helpers.AbstractSession.messageReceived(AbstractSession.java:505) at org.apache.sshd.common.session.helpers.AbstractSessionIoHandler.messageReceived(AbstractSessionIoHandler.java:64) at org.apache.sshd.common.io.nio2.Nio2Session.handleReadCycleCompletion(Nio2Session.java:409) at org.apache.sshd.common.io.nio2.Nio2Session$1.onCompleted(Nio2Session.java:382) at org.apache.sshd.common.io.nio2.Nio2Session$1.onCompleted(Nio2Session.java:377) at org.apache.sshd.common.io.nio2.Nio2CompletionHandler.lambda$completed$0(Nio2CompletionHandler.java:38) at java.security.AccessController.doPrivileged(Native Method) at org.apache.sshd.common.io.nio2.Nio2CompletionHandler.completed(Nio2CompletionHandler.java:37) at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:126) at sun.nio.ch.Invoker$2.run(Invoker.java:218) at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:750)
问题原因
mina-sshd 2.9.2版本中对arcfour256(RC4)这类流加密算法的处理存在逻辑错误:流加密算法没有块大小的概念,但代码中错误地沿用了块加密的处理逻辑,导致解密阶段传入了非法的参数值(-8),触发javax.crypto.Cipher.update的参数异常。
解决方案
1. 升级mina-sshd版本(推荐)
该bug在mina-sshd 2.10.0及后续版本中已被修复,直接升级到最新稳定版即可彻底解决问题。
2. 临时配置绕过(无法升级时)
- 调整加密算法优先级:在mina-sshd客户端配置中,将
arcfour128或其他兼容的高安全等级算法设置为优先选项,避免协商时选中arcfour256。示例代码:SshClient client = SshClient.setUpDefaultClient(); client.setCipherFactories(Arrays.asList( BuiltinCiphers.arcfour128, BuiltinCiphers.aes128ctr, // 其他兼容算法 BuiltinCiphers.arcfour256 // 仅作为 fallback )); - 自定义Cipher实现:如果必须使用
arcfour256,可以自定义BaseCipher的子类,重写流加密相关的处理逻辑,跳过块大小的计算,避免传入非法参数。
3. 目标设备端调整
如果目标设备的配置允许,在sshd_config中添加arcfour128或其他mina-sshd支持的加密算法,让双方协商时选择兼容的算法。例如在设备的sshd配置中添加:
Ciphers arcfour256,arcfour128,aes128-ctr
内容的提问来源于stack exchange,提问作者hang xing
相关产品推荐
相关产品推荐

