下面的代码是否正确,才能连接到远程Linux主机并使用Apache Mina完成一些任务?

时间:2019-07-15 13:45:16

标签: apache-mina

我想从Jsch切换到Apache Mina,以查询远程Linux主机并完成一些任务。 我需要实现诸如列出远程主机的文件,更改目录,获取文件内容,将文件放入远程主机之类的事情,

我能够使用session.executeRemoteCommand()成功连接并执行一些shell命令。

public byte[] getRemoteFileContent(String argDirectory, String fileName)
      throws SftpException, IOException {

    ByteArrayOutputStream stdout = new ByteArrayOutputStream();

    StringBuilder cmdBuilder = new StringBuilder("cat" + SPACE + remoteHomeDirectory);
    cmdBuilder.append(argDirectory);
    cmdBuilder.append(fileName);

    _session.executeRemoteCommand(cmdBuilder.toString(), stdout, null, null);
    return stdout.toByteArray();
}


public void connect()
 throws IOException {

_client = SshClient.setUpDefaultClient();
 _client.start();

ConnectFuture connectFuture = _client.connect(_username, _host, portNumber);
 connectFuture.await();
 _session = connectFuture.getSession();
shellChannel = _session.createShellChannel();
 _session.addPasswordIdentity(_password);

// TODO : fix timeout
 _session.auth().verify(Integer.MAX_VALUE);

_channel.waitFor(ccEvents, 200);
 }

我有以下问题,

  1. 如何在API级别(而不是Shell命令级别)轻松地将ZIP文件发送到远程主机?以及API级别的所有其他操作。
  2. 我可以通过证书保护本地主机和远程主机之间的连接吗?
  3. 截至目前,我正在使用SSHD-CORE和SSHD-COMMON版本2.2.0。这些库是否足够?还是需要包含其他库?
  4. executeRemoteCommand()是无状态的,我如何保持状态?

1 个答案:

答案 0 :(得分:0)

我需要sshd-sftp及其API才能进行文件传输。 下面的代码获取正确的API, sftpClient = SftpClientFactory.instance()。createSftpClient(clientSession); 在sftpClinet上,我调用了read()和write()方法来完成任务。这完全可以回答我的问题。