sftp连接工具ganymed-ssh2,连接不到Apache SSHD sftp服务器的问题

上篇解决了低版本jsch连接sftp服务器的问题,后来又发现一个项目中有另一个连接工具ganymed-ssh2,再来解决一下

排查

查看版本,是2006年的包,很有可能也是算法跟不上的问题
在这里插入图片描述

依赖如下

<dependency>
    <groupId>ch.ethz.ganymed</groupId>
    <artifactId>ganymed-ssh2</artifactId>
    <version>build210</version>
</dependency>

kex algorithms不匹配问题

使用此依赖,测试连接本地sftp服务器,本地sftp服务器警告kex algorithms不匹配问题 :

exceptionCaught(ServerSessionImpl[null@/192.168.1.5:56754])
[state=Opened] 
SshException: Unable to negotiate key exchange for kex algorithms 
(
	client: 
		diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 
	/ 
    server: 
        ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,
        diffie-hellman-group-exchange-sha256,diffie-hellman-group18-sha512,
        diffie-hellman-group17-sha512,diffie-hellman-group16-sha512,
        diffie-hellman-group15-sha512,diffie-hellman-group14-sha256,
        ext-info-s
)
Disconnecting(ServerSessionImpl[null@/192.168.1.5:56754]): 
SSH2_DISCONNECT_KEY_EXCHANGE_FAILED - 
Unable to negotiate key exchange for kex algorithms 
(
	client: 
		diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 
	/ 
	server: 
		ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,
		diffie-hellman-group-exchange-sha256,diffie-hellman-group18-sha512,
		diffie-hellman-group17-sha512,diffie-hellman-group16-sha512,
		diffie-hellman-group15-sha512,diffie-hellman-group14-sha256,
		ext-info-s
)

意思是客户端支持的算法和服务端没有能对应上的

在此类其实能搜到

org.apache.sshd.common.kex.BuiltinDHFactories
在这里插入图片描述

但均标注了@Deprecated表示废弃,应该是安全性不够

在这里插入图片描述

算法装载处在下面类,那我找有没有重写的入口

org.apache.sshd.common.BaseBuilder
在这里插入图片描述

可以看到是启动服务器时加载的

我们用反射修改一下静态变量

在这里插入图片描述

可以看到在程序初始化时已经使用了自定义的列表
在这里插入图片描述

host key algorithms不匹配问题

测试,依然报错

exceptionCaught(ServerSessionImpl[null@/192.168.1.5:58098])
[state=Opened] SshException: Unable to negotiate key exchange for server host key algorithms 
(
    client: ssh-rsa,ssh-dss 
    / 
    server: ecdsa-sha2-nistp256
)

Disconnecting(ServerSessionImpl[null@/192.168.1.5:58098]): SSH2_DISCONNECT_KEY_EXCHANGE_FAILED - Unable to negotiate key exchange for server host key algorithms 
(
	client: ssh-rsa,ssh-dss 
	/ 
	server: ecdsa-sha2-nistp256
)

根据上半场推断,sftp服务器默认使用了ec算法,并且长度为256

看KeyPairProvider里是包含ssh-rsa,ssh-dss的,所以我们继续对算法进行”降级“。。。。。。。。。。

org.apache.sshd.common.keyprovider.KeyPairProvider
在这里插入图片描述

默认使用了ec,也可以改rsa、dsa

org.apache.sshd.server.keyprovider.AbstractGeneratorHostKeyProvider

在这里插入图片描述

org.apache.sshd.common.config.keys.KeyUtils

在这里插入图片描述

我们改成其中一个试试,就RSA吧
在这里插入图片描述

重启,看到server算法变成rsa了

org.apache.sshd.common.session.helpers.AbstractSession
在这里插入图片描述

使用jsch与ganymed-ssh2测试都可以成功

结论–可兼容ganymed-ssh2

项目中除了jsch,还使用了ganymed-ssh2包,版本是2006年的,支持的算法更少更简单,通过对sftp服务算法调整到客户端的rsa或das达到兼容的目的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值