2

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 : 

サイバーダック接続ログを表示するように編集

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
4

2 に答える 2

2

同様の問題があり、根本的な原因は ColdFusion サービスがローカル ユーザーとして実行されていなかったことです。CF をコンソール モードで実行すると、FTP サイトがユーザーが認証を受け入れるのを待っていることがわかります。CF側では、タイムアウトするだけです。

これを解決するために、cfftp タグの直前に次の 2 行を追加しました。

<cfset _jsch = CreateObject('java','com.jcraft.jsch.JSch')>
<cfset _jsch.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password")>
于 2015-04-24T11:55:02.240 に答える
0

cfhttpのタイムアウト値を変更してみましたか。<cfhttp timeout="240">を使用して秒単位で指定することにより、デフォルトのタイムアウトを変更できます。

于 2012-12-01T13:53:17.800 に答える