因开发测试需要,项目暂没提供SFTP
服务器,因此这里打算自己用DOCKER搭建一个做一些上传下载测试。
docker search sftp
image.png
docker run --name sftp2222 -v /Users/qudian/Desktop/sh/docker:/home/qd/upload --privileged=true -p 2222:22 -d atmoz/sftp qd:123456:1001
--name sftp2222 容器名称
qd:123456:1001 用户名:密码:用户ID
-p 2222:22 将宿主机的2222端口映射到容器的22端口,这样方位宿主机的2222端口则会转发到容器的22端口上
-d atmoz/sftp 使用dockerhub中的atmoz/sftp镜像创建容器
-v /Users/qudian/Desktop/sh/docker:/home/qd/upload 其中冒号前边的是宿主机目录,后边的挂载到容器中的目录,如果本地目录不存在会自动创建,上传下载文件都可以在主机这个目录中看到
--privileged=true 由于linux的selinux安全规则所以需要给容器加特权
这样就启动了SFTP容器,已经可以使用工具比如FILEZILLA连接了,但还没法在JAVA程序中使用jsch包连接,会报一个Exception:Algorithm negotiation fail
image.png
原因分析:
OpenSSH和 JSch支持的交换算法不同,需要一方打开另一方支持的交换算法。
解决办法:
在SSH的配置文件
/etc/ssh/sshd_config
增加以下两行,让SSH支持相应的算法和MACs
KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com,hmac-md5,hmac-sha1,hmac-sha1-96,hmac-md5-96
但新容器又没有安装VI,因此需要先进入容器,然后在容器中先后执行以下两条命令:
docker exec -it 212a252dd5b6 /bin/bash
apt-get update
apt-get install vim
修改好配置文件后,在JAVA程序中就可以使用SFTP工具类jsch做一些FTP操作了
FTP DOCKER
docker run -d -p 21:21 -p 20:20 -p 21100-21110:21100-21110 -v /Users/qudian/Desktop/sh/docker:/home/vsftpd/qd/ -e FTP_USER=qd -e FTP_PASS=123456 -e PASV_ADDRESS=127.0.0.1 -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 --name vsftpd --restart=always fauria/vsftpd
网友评论