我正在开发一个使用SSHJ进行SFTP传输的库。由于请求频繁,我想知道是否可以只打开连接。
显然,如果服务器经常超时连接,这将一无所获。因为我无法控制服务器,所以我必须保持连接正常:使用常规的SSH客户端,我可以指定一个ServerAliveInterval,并让客户机为我做这件事。
我也想对SSHJ做同样的事情,但是我不知道该发送什么消息。
SSH手册只是说ServerAliveInterval
设置超时间隔(秒),如果没有从服务器接收数据,ssh(1)将通过加密的通道发送消息以请求服务器的响应。
所以我想知道:什么信息是被发送的?我如何通过SSHJ复制这条消息?
发布于 2012-05-14 14:13:43
发布于 2015-06-20 11:36:49
从0.11.0版本开始,您可以使用内置KeepAliveProvider
public class KeepAlive {
public static void main(String... args)
throws IOException, InterruptedException {
DefaultConfig defaultConfig = new DefaultConfig();
defaultConfig.setKeepAliveProvider(KeepAliveProvider.KEEP_ALIVE);
final SSHClient ssh = new SSHClient(defaultConfig);
try {
ssh.addHostKeyVerifier(new PromiscuousVerifier());
ssh.connect(args[0]);
ssh.getConnection().getKeepAlive().setKeepAliveInterval(5); //every 60sec
ssh.authPassword(args[1], args[2]);
Session session = ssh.startSession();
session.allocateDefaultPTY();
new CountDownLatch(1).await();
try {
session.allocateDefaultPTY();
} finally {
session.close();
}
} finally {
ssh.disconnect();
}
}
}要发送心跳,可以使用KeepAliveProvider.HEARTBEAT。
https://stackoverflow.com/questions/10351484
复制相似问题