首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SSHJ保持SSH连接的存活?

如何使用SSHJ保持SSH连接的存活?
EN

Stack Overflow用户
提问于 2012-04-27 13:25:34
回答 2查看 4.4K关注 0票数 5

我正在开发一个使用SSHJ进行SFTP传输的库。由于请求频繁,我想知道是否可以只打开连接。

显然,如果服务器经常超时连接,这将一无所获。因为我无法控制服务器,所以我必须保持连接正常:使用常规的SSH客户端,我可以指定一个ServerAliveInterval,并让客户机为我做这件事。

我也想对SSHJ做同样的事情,但是我不知道该发送什么消息。

SSH手册只是说ServerAliveInterval

设置超时间隔(秒),如果没有从服务器接收数据,ssh(1)将通过加密的通道发送消息以请求服务器的响应。

所以我想知道:什么信息是被发送的?我如何通过SSHJ复制这条消息?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-14 14:13:43

票数 8
EN

Stack Overflow用户

发布于 2015-06-20 11:36:49

从0.11.0版本开始,您可以使用内置KeepAliveProvider

代码语言:javascript
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10351484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档