【发布时间】:2014-08-26 09:20:21
【问题描述】:
我正在尝试使用 jsch 库连接到 SFTP 服务器。我就是这样做的:
public class SFTPConnection {
private String sftpHost;
private String sftpUser;
private String sftpPass;
private String sftpWorkDir;
private Session session = null;
private Channel channel = null;
private ChannelSftp channelSftp = null;
static final String SFTPHOST = "prod-sftp.host.ru";
static final String SFTPUSER = "user";
static final String SFTPPASS = "pass";
static final String SFTPWORKINGDIRINC = "/dir/Port_Increment/";
static final String SFTPWORKINGDIRFULL = "/dir/Port_All_Full/";
public SFTPConnection(String sftpHost, String sftpUser, String sftpPass, String sftpWorkDir) throws JSchException, SftpException {
this.sftpHost = sftpHost;
this.sftpUser = sftpUser;
this.sftpPass = sftpPass;
this.sftpWorkDir = sftpWorkDir;
JSch jsch = new JSch();
session = jsch.getSession(this.sftpUser, this.sftpHost, 3232);
session.setPassword(this.sftpPass);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp) channel;
channelSftp.cd(this.sftpWorkDir);
}
public SFTPConnection() throws JSchException, SftpException {
sftpWorkDir = SFTPWORKINGDIRINC;
JSch jsch = new JSch();
session = jsch.getSession(SFTPUSER, SFTPHOST, 3232);
session.setPassword(SFTPPASS);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp) channel;
channelSftp.cd(SFTPWORKINGDIRINC);
}
public static void main(String[] args) {
try {
SFTPConnection con=new SFTPConnection();
} catch (JSchException e) {
e.printStackTrace();
} catch (SftpException e) {
e.printStackTrace();
}
}
}
这段代码可以在我的机器上运行,但现在我需要将它部署在另一台具有高安全级别的服务器上。这就是我所拥有的。 例外是:
com.jcraft.jsch.JSchException: java.net.ConnectException: Connection timed out: connect
at com.jcraft.jsch.Util.createSocket(Util.java:344)
at com.jcraft.jsch.Session.connect(Session.java:215)
at com.jcraft.jsch.Session.connect(Session.java:183)
at SFTPConnection.<init>(SFTPConnection.java:53)
at SFTPConnection.main(SFTPConnection.java:62)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:208)
at com.jcraft.jsch.Util.createSocket(Util.java:338)
... 9 more
我尝试使用具有相同参数的 WinSCP 进行连接。我试图将端口从3232 更改为22,但仍然出现此错误。怎么了?
统一更新:
我无法ping通prod-sftp.host.ru:
Pinging #ipaddress# with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
但是 telnet 可以连接到 22-nd 端口。
附言
大多数参数不是真实的。不要尝试自己ping它。我只是不想与您共享主机、用户名和密码。
【问题讨论】:
-
# host -a prod-sftp.host.ru prod-sftp.host.ru does not exist (Authoritative answer) -
But telnet can connect to 22-nd port.我对此表示怀疑。你得到了什么? -
@PeterMmm,我当然改变了这个问题的参数。我也不想分享我的密码和用户名。
-
所以
prod-sftp.host.ru不是您要连接的主机?因为所有点都表明服务器在端口3232上不可用。 -
不,不是。我想我应该说更多细节。等一下。