You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:44:57