C#使用Tamir.SharpSsh.jsch上传文件异常Algorithm negotiation fail
环境
服务器:centos6.5
客户端:Windows
前言
项目中有一个exe,安装在客户端,其中有一个功能是将本地产生的文件上传至服务器,这个功能是以服务的方式安装在客户端上。之前一切好使,文件能正常上传到服务器。但最近发现产生的文件没有被上传到服务器,查看文件上传服务的事件日志提示密码错误。但是我可以保证服务器的密码没人动过。
问题复现
苦寻未果,最后找出工程,启动调试,当Tamir.SharpSsh.jsch.Session
对象连接目标服务器时,抛出异常了Tamir.SharpSsh.jsch.JSchException:“Algorithm negotiation fail”
意思是算法协商失败。
到这里突然想起来,前段时间因为漏扫出很多漏洞,其中就有openssh
当时顺便一起升级了,没想到给自己埋坑了,升级后加密算法不一样了,导致Tamir.SharpSsh.jsch
无法连接到服务器。抛出算法协商失败的异常。
解决
1、网上很多解决方案,最简单的就是修改sshd_config
文件,加入一些加密算法,我试了,行不通。
2、尝试升级Tamir.SharpSsh.jsch
,能找到的版本就是SharpSSH-1.1.1.13,而我项目里引用的就是这个版本,找半天没找到更高的版本。
3、期间想过把openssh降级,恢复到系统默认安装的版本。但这个办法会导致漏扫出漏洞。
4、最终决定弃用Tamir.SharpSsh.jsch
改用Renci.SshNet.Sftp
,在管理NuGet程序包
里直接搜SSH.NET
第一个就是,下载安装引用一气呵成。
程序稍微的改动下,可以正常连接,并上传文件。
end。