我在通过JSch创建到远程SFTP服务器的会话时遇到问题:
我用来通过外壳连接sftp服务器的命令是:
sftp -o BindAddress=SOME_IP_ADDRRESS myUserName@HOST_IP_ADDR
及其正常工作,但是当我尝试使用Java(JSch)时,我遇到了超时异常。Java代码是
/* KEY_FILE_NAME = is a file with rsa public key */
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource(KEY_FILE_NAME).getFile());
JSch jsch = new JSch();
jsch.addIdentity(file.getAbsolutePath());
Properties hash = new Properties();
hash.put("StrictHostKeyChecking", "no");
logger.debug("SSh Server Host name >>" + SSH_SERVER_HOST_NAME + " || User Name >>" + SSH_SERVER_USER_NAME);
session = jsch.getSession(SSH_SERVER_USER_NAME, SSH_SERVER_HOST_NAME);
UserInfo ui = new MyUserInfo();
session.setUserInfo(ui);
session.setConfig(hash);
session.setPort(22);
session.setTimeout(45000);
session.connect();
我得到的异常是:
com.jcraft.jsch.JSchException:超时:未建立套接字
我猜想它的到来是因为我没有在使用shell命令时设置我正在使用的BindAddress
with-o
选项。如果是这样,那么如何-o BindAddress
在JSch中设置参数?还是我做错了什么,请提出建议。
我认为在JSch中没有明确支持选择要从中进行连接的网络接口。
但是您可以实现一个SocketFactory
接口,例如它Socket
使用带有的构造函数重载localAddr
来创建实例:
public Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
(将0用作localPort
)
然后Session.setSocketFactory()
在致电之前将工厂交给connect()
,您应该会很好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句