【发布时间】:2017-05-08 08:43:44
【问题描述】:
我已经从here 下载并创建了 Apache Mina 基础 FTP 服务器。 我可以使用 FTP 进行连接。
当我尝试使用以下配置配置 SFTP 时,当我尝试使用 FIleZila 或任何其他客户端进行 SFTP 连接时出现错误。
服务器配置:
<?xml version="1.0" encoding="UTF-8"?>
<server xmlns="http://mina.apache.org/ftpserver/spring/v1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="
http://mina.apache.org/ftpserver/spring/v1 http://mina.apache.org/ftpserver/ftpserver-1.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
id="myServer">
<listeners>
<nio-listener name="default" port="2222" implicit-ssl="true" idle-timeout="60">
<ssl>
<keystore file="mykeystore.jks" password="ftpkey" key-password="ftpkey" />
</ssl>
</nio-listener>
</listeners>
<!--<file-user-manager file="users.properties"
encrypt-passwords="true" />-->
以下是我用来生成证书的命令:
keytool -genkey -alias ftpkeya -keysize 1024 -dname "cn=mydomain.com,o=mycompany,ou=company,l=Capelle,s=NL,c=NL" -keystore mykeystore.jks -keypass ftpkey -storepass ftpkey -keyalg RSA
keytool -list -keystore mykeystore.jks -storepass ftpkey -v
keytool -export -alias ftpkeya -keystore mykeystore.jks -storepass ftpkey -file serverCertificate.arm -rfc
我正在使用 keytool 来生成密钥和证书。当我生成证书并在上面的服务器配置中进行配置时,我的服务器以 SFTP 支持启动,但是当我尝试使用 FTP 客户端连接被拒绝时,
我在使用不同 FTP 客户端的服务器日志中遇到不同的异常:
我在使用 WinScp 时的服务器异常日志。
[ WARN] 2017-05-08 09:49:16,018 [] [0:0:0:0:0:0:0:1] EXCEPTION :
org.apache.mina.core.write.WriteToClosedSessionException
at org.apache.mina.core.polling.AbstractPollingIoProcessor.clearWriteRequestQueue(AbstractPollingIoProcessor.java:641)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.removeNow(AbstractPollingIoProcessor.java:592)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.removeSessions(AbstractPollingIoProcessor.java:562)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$800(AbstractPollingIoProcessor.java:68)
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1149)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
[ WARN] 2017-05-08 09:49:16,019 [] [0:0:0:0:0:0:0:1] Client closed connection before all replies could be sent, last reply was WriteRequest: HeapBuffer[pos=0 lim=20 cap=20: 35 33 30 20 41 63 63 65 73 73 20 64 65 6E 69 65...]
[ INFO] 2017-05-08 09:49:16,019 [] [0:0:0:0:0:0:0:1] CLOSED
当我使用 filezila 时会有更多不同。
客户端日志:
Status: Waiting to retry...
Status: Connecting to 172.27.136.44:2222...
Response: fzSftp started, protocol_version=8
Command: open "admin@172.27.136.44" 2222
Error: Network error: Connection refused
Error: Could not connect to server
从 FileZilla 连接时的服务器端日志
[ WARN] 2017-05-08 09:42:45,913 [] [172.27.136.44] EXCEPTION :
java.io.IOException: An existing connection was forcibly closed by the remote host
at sun.nio.ch.SocketDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:280)
at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:44)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:695)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:668)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:657)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:68)
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1141)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
[ERROR] 2017-05-08 09:42:45,916 [] [172.27.136.44] Exception caught, closing session
java.io.IOException: An existing connection was forcibly closed by the remote host
at sun.nio.ch.SocketDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:280)
at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:44)
我希望从任何 FTP 客户端连接时服务器日志不应该有任何差异我不明白这里的问题原因和问题所在。我已经参考了这个link.
提前感谢您提供任何帮助和信息。
【问题讨论】:
-
也向我们展示客户端日志。
-
已添加客户端 filezilla 日志。我不确定我可以从哪里获得winscp日志。
-
日志只是证实了我的回答。 - 您正在使用 SFTP 协议连接到 FTP(S) 服务器。那是行不通的。在客户端使用 FTP(S) - 或者如果您确实需要实现 SFTP 服务器,那么您就完全错了。
-
SFTP(SSH 文件传输协议/安全文件传输协议)被设计为 SSH 的扩展以提供文件传输能力,因此它通常只使用 SSH 端口进行数据和控制。
-
所以如果我想要自定义端口,我应该进行 FTPS 配置,对吗?
标签: apache ssl sftp keytool client-certificates