当前位置: 首页 > 知识库问答 >
问题:

sshException:DefaultOpenFuture-用于SFTP通信的APACHE MINA

梁成双
2023-03-14

我得到以下异常:

org.apache.sshd.common.SshException: DefaultOpenFuture[ChannelSubsystem[id=0, recipient=-1]-
        ClientSessionImpl[app6204@denad534.us.oracle.com/10.88.224.99:22][sftp]]: Failed to get operation result within specified timeout: 15000    
at org.apache.sshd.common.future.AbstractSshFuture.formatExceptionMessage(AbstractSshFuture.java:187)
at org.apache.sshd.common.future.AbstractSshFuture.verifyResult(AbstractSshFuture.java:112)
at org.apache.sshd.client.future.DefaultOpenFuture.verify(DefaultOpenFuture.java:39)
at org.apache.sshd.client.future.DefaultOpenFuture.verify(DefaultOpenFuture.java:32)
at org.apache.sshd.client.subsystem.sftp.impl.DefaultSftpClient.<init>(DefaultSftpClient.java:97)
at org.apache.sshd.client.subsystem.sftp.impl.DefaultSftpClientFactory.createDefaultSftpClient(DefaultSftpClientFactory.java:67)
at org.apache.sshd.client.subsystem.sftp.impl.DefaultSftpClientFactory.createSftpClient(DefaultSftpClientFactory.java:47)
at org.apache.sshd.client.subsystem.sftp.SftpClientFactory.createSftpClient(SftpClientFactory.java:46)
at SSHClientExample.main(SSHClientExample.java:76)

代码:

   public static void main(String[] args){
    SshClient client = SshClient.setUpDefaultClient();

    client.start();
    try {
       // DefaultOpenFuture defaultOpenFuture = new DefaultOpenFuture();
        ConnectFuture future = client.connect("user", "Host", 22);
        //ClientFactoryManager clientFactoryManager = client.
        client.open();

        client.start();
        client.addPasswordIdentity("PWD");
        client.setClientIdentityLoader(ClientIdentityLoader.DEFAULT);
        client.setHostConfigEntryResolver(HostConfigEntryResolver.EMPTY);

        ServerKeyVerifier serverKeyVerifier = AcceptAllServerKeyVerifier.INSTANCE;
        client.setServerKeyVerifier(serverKeyVerifier);
        SessionFactory sessionFactory = client.getSessionFactory();
        ClientFactoryManager factoryManager =sessionFactory.getFactoryManager();

        //.verify is necessary to get session
        ClientSession clientSession = future.verify(100L,TimeUnit.SECONDS).getSession();
       // ClientChannel clientChannel = clientSession.createChannel("exec");
        future.setSession(clientSession);
                //KeyPair keyPair =  new KeyPair(PublicKey.serialVersionUID);
        //clientSession.addPublicKeyIdentity();
        clientSession.setAuthenticated();
        System.out.println(future.isConnected());
        System.out.println(clientSession);
        SftpClientFactory sftpFactory = SftpClientFactory.instance();
        //SFTP Version
        SftpVersionSelector selector = SftpVersionSelector.fixedVersionSelector(6);
        //SFTP Client
       // clientSession.createChannel("FTP");
        System.out.println("Client session opened?"+clientSession.isOpen());
        System.out.println("Client is opened?"+client.isOpen());
        clientSession.addPasswordIdentity("PWD");
        //SftpClient sftpClient = sftpFactory.createSftpClient(clientSession, selector);
        //System.out.println(sftpClient.open(" /slot/dummy/appmgr/location").getPath());
        System.out.println(clientSession.getClientVersion());
        //System.out.println(clientSession.createSubsystemChannel("SFTP").getSubsystem().getBytes());
        DefaultSftpClientFactory defaultSftpClientFactory = new DefaultSftpClientFactory();
        clientSession.addPublicKeyIdentity(KeyPairGeneratorMethod());
        client.addPublicKeyIdentity(KeyPairGeneratorMethod());
        //SftpClient sftp = defaultSftpClientFactory.createSftpClient(clientSession);
        SftpClient sftp = defaultSftpClientFactory.createSftpClient(clientSession);
         //= DefaultSftpClientFactory.INSTANCE.createSftpClient(clientSession);
        //SftpClient sftp = new DefaultSftpClient(clientSession);
        // SimpleSftpClientImpl sftp = new SimpleSftpClientImpl();
        ClientChannel channel = clientSession.createSubsystemChannel(SftpConstants.SFTP_SUBSYSTEM_NAME);
        System.out.println(channel.getSession().isAuthenticated());
        //System.out.println(sftp.open(" /slot/dummy/appmgr/location").getPath());            //client.close();

    }

    catch (SshException e){
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        //TODO
    }

    //client.stop();
}

共有1个答案

璩无尘
2023-03-14

我可以用下面的代码消除这个错误。

clientsession.auth().verify();

 类似资料:
  • 我的本地计算机上有一个文件。我有一个Perl脚本可以通过SFTP连接将此文件复制到远程位置()。

  • 问题内容: 我正在使用具有多个唯一标识的从属进程的分布式应用程序,这些进程将通过启用SSL的套接字与主应用程序进行通信。该应用程序用Java编写。 我需要一些帮助来了解SSLSocket,或者更确切地说,是它们使用的证书。 我正在寻找的人可以告诉我我是否正确理解了证书链的基本工作原理,但是我也不会拒绝代码示例。 我想要一个服务器本身具有CA签名证书的设置,每个从属服务器都将获得由主应用程序创建的自

  • 我已经为两个Kafka集群(名为DC、DR)设置了带有主动-主动策略的Apache MirrorMaker 3.0.0。因此,MirrorMaker2将有关DC的主题复制为DC。 在每个集群中,我设置了3个kafka代理节点。 假设使用了以下 IP 配置 连接制造商属性 我只想了解是否只有9092端口足以进行集群间通信(记录、偏移和其他元数据转换),或者我们是否还需要在一些端口上开放连接?

  • 我使用的是net::ftp::foreign,但我一直收到一个关于文件找不到的错误,我不确定是我的语法错了还是我误解了如何使用它。 我得到的错误是远程端不存在这样的文件,但我已经确认当我执行LS cmd时它们确实存在。 我的脚本有什么明显的错误导致它不能工作吗? 另外,我使用的是net::sftp::foreign因为net::sftp不会构建在运行10.7的MBP上

  • 我试图找出如何为基于Java的SFTP服务器实现服务器端监听器,以提醒我传入的文件传输。我使用的是最新版本的Apache Mina。我的场景是我的服务器简单地从客户机接收一个文件,并在存储它之前对该文件做“一些事情”。这可能是错误检查/规则验证/将内容转发到其他地方。问题是我想在它保存在我的系统上之前做到这一点。我对文档有困难,找不到一个工作示例来显示通过访问传入文件流实现的监听器。我有一个非常简

  • 根据微服务文档,建议不要通过请求/响应Http模式在微服务之间同步通信,除非需要。我有关于微服务通信的问题。 我在这里的设计是,在UI搜索之后,我将到达API网关,对Catalog微服务进行Http调用,当从Catalog获取细节时,我将进行两个不同的Http调用,一个用于定价微服务,另一个用于库存微服务,以获取细节,在得到响应后,我将形成响应DTO并将其传递给前端UI,以显示关于产品、定价、库存