实现SSH命令以返回Apache Mina中的文件内容

时间:2017-09-28 12:35:19

标签: java ssh jsch apache-mina

我创建了一个打开cmd的SSH服务器。当我连接Putty时cmd是开放的,例如,如果我写dir(这是我在代码中输入的命令),一切都还可以。

现在,我的问题是:如何创建一些API(例如,如果我写命令hello,就像命令一样)来返回一些文件内容。

我想实现这个目标:  1.将Putty连接到服务器  写"你好"例如  3.在putty控制台中打印某些文件的内容。

这是我的SSH服务器的代码。我正在使用apache-mina库:

public class SshServerMock {

public static void server() throws IOException, JSchException, SftpException {
    SshServer sshd = SshServer.setUpDefaultServer();

    sshd.setHost("127.0.0.1");
    sshd.setPort(22);

    sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(new File("C://hostkey.ser")));
    sshd.setPasswordAuthenticator(new PasswordAuthenticator() {

        @Override
        public boolean authenticate(String u, String p, ServerSession s) {              
            return ("root".equals(u) && "iskratel".equals(p));
        }   

    });

    sshd.setShellFactory(new ProcessShellFactory(new String[] { "cmd.exe" }));
    sshd.start();
    try {
        Thread.sleep(100000000000l);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }


}

}

1 个答案:

答案 0 :(得分:1)

执行cmd,启动Windows shell。在那一刻,会话失去了对代码的控制。您无法使用Java代码向shell添加命令。

但显然,您可以在Windows shell中添加该命令。只需创建一个hello.bat批处理文件,并确保它在Windows PATH中以便于访问。确保为运行会话的本地("本地"服务器)帐户设置PATH

hello.bat批处理文件可以像以下一样简单:

type c:\path\to\file.txt

请注意,允许用户运行cmd.exe可能非常危险。所以请确保你知道,你在做什么。

在我看来,您应该实施CommandFactory interface

让它创建一个Command来提供"文件"到setOutputStream提供的流。

在客户端,使用JSch库,使用以下代码:
http://www.jcraft.com/jsch/examples/Exec.java.html