【问题标题】:Coldfusion secure cfftp times outColdfusion 安全 cfftp 超时
【发布时间】:2017-06-26 04:04:00
【问题描述】:

我正在使用 Coldfusion 9。我已验证 sFTP 主机有效并且可以使用“Cyber​​Duck”进行连接。端口不是标准的21(ftp)或22(ssh)

<cfftp 
    username=   "myysername"
    password=   "mypassword"
    port=       "6589"
    server=     "ftphost.com"
    secure=     "yes"
    name=       "ftpconnection"
    action=     "open" />

<cfdump var="#ftpconnection#">

大约 1 分钟后的结果是:

com.jcraft.jsch.JSchException: Session.connect: java.net.SocketTimeoutException: Read timed out
    at com.jcraft.jsch.Session.connect(Unknown Source)
    at com.jcraft.jsch.Session.connect(Unknown Source)
    at coldfusion.tagext.net.SftpHandler.getConnection(SftpHandler.java:265)
    at coldfusion.tagext.net.SftpHandler.createConnection(SftpHandler.java:76)
    at coldfusion.tagext.net.FtpTag.doStartTag(FtpTag.java:675)
    at coldfusion.runtime.CfJspPage._emptyTcfTag(CfJspPage.java:2722)

我也尝试通过手动调用 JSCH 类 (http://www.jcraft.com/jsch/examples/Sftp.java.html) 来建立此连接,但无济于事。

问题是,为什么在代码中会出现这种超时,但在使用 Cyber​​Duck 这样的程序时却不会?

编辑以添加 CF-Java 代码

jsch = CreateObject("java", "com.jcraft.jsch.JSch");
jsession = CreateObject("java", "com.jcraft.jsch.Session");
jChannel = CreateObject("java", "com.jcraft.jsch.Channel");
jChannelSFTP = CreateObject("java", "com.jcraft.jsch.ChannelSftp");
jUserInfo = CreateObject("java", "com.jcraft.jsch.UserInfo");
jProperties = CreateObject("java", "java.util.Properties");
jLogger = CreateObject("java", "com.jcraft.jsch.Logger");

host = "ftphost.com";
username = "myusername";
portNumber = "6589";

javaCast("String", "host");
javaCast("String", "username");

/* *********************** */
jProperties.put("StrictHostKeyChecking", "no");
jsession = jsch.getSession(username, host, portNumber);
jsession.setPassword("mypassword");
jsession.setPort(6589);
jsession.setUserInfo(jUserInfo);
jsession.setConfig(jProperties);

writeOutput("Connect ...");
getPageContext().getOut().flush();
jsession.connect();
writeOutput("done <br>");

这段代码本身没有错误,但 connect() 方法永远不会“返回”:

connection is closed by foreign host

    The error occurred in /Library/WebServer/Coldfusion/SFTP/index.cfm: line 53
    51 : writeOutput("Connect ...");
    52 : getPageContext().getOut().flush();
    53 : jsession.connect();
    54 : writeOutput("done <br>");
    55 : 

已编辑以显示 CYBERDUCK 连接日志

220 Service ready for new user.
AUTH TLS
234 Command AUTH okay; starting TLS connection.
USER myusername
331 User name okay, need password for myusername.
PASS ********
230 User logged in, proceed.
PBSZ 0
200 Command PBSZ okay.
PROT P
200 Command PROT okay.
FEAT
[ ... ]

OPTS UTF8 ON
200 Command OPTS okay.
NOOP
200 Command NOOP okay.
SYST
215 UNIX Type: Apache FtpServer
STAT /root
200--rw-------   1 SMG TGMS       263375 Nov 25 01:35 afile.txt

【问题讨论】:

  • 这篇文章有帮助吗? stackoverflow.com/questions/14617/…
  • 我编辑了我的原始帖子,以显示我在尝试手动调用 JSCH 类时使用的确切 CF-Java。
  • 您的示例仅显示了 ftp 连接的打开。你在使用那个连接吗?可能由于不活动超时,ftp 服务器正在断开连接。
  • Miguel-F 在我使用 CreateObject() 的第二个示例中,它似乎没有连接。代码超时并在第 53 行抛出错误。对我来说,这意味着 connect() 方法永远不会返回,因此它下面的代码不会被执行。第一个使用 cfml 的示例超时并在 标记上引发错误。再一次,它似乎没有返回让我继续执行代码。
  • 当您使用“Cyber​​Duck”连接时,它是否来自装有 ColdFusion 的服务器?

标签: coldfusion ssh ftp sftp


【解决方案1】:

我遇到了类似的问题,根本原因是 ColdFusion 服务没有以本地用户身份运行。如果您在控制台模式下运行 CF,您将看到 FTP 站点正在等待用户接受身份验证。在 CF 方面,它只是超时。

为了解决这个问题,我在 cfftp 标记之前添加了这两行。

<cfset _jsch = CreateObject('java','com.jcraft.jsch.JSch')>
<cfset _jsch.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password")>

【讨论】:

    【解决方案2】:

    您是否尝试过更改 cfhttp.您可以使用&lt;cfhttp timeout="240"&gt; 并指定以秒为单位更改默认超时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      相关资源
      最近更新 更多