对 Apache Mina 中的文件内容执行 SSH 命令 return

Implement SSH command to return a contents of a file in Apache Mina

我创建了一个正在打开的 SSH 服务器 cmd。当我连接 Putty 时,cmd 处于打开状态,例如,如果我编写 dir(这是我在代码中输入的命令),一切正常。

现在,我的问题是:如何创建一些 API(例如,如果我写:hello 像一个命令)到 return 一些文件内容。

我想实现这个: 1.用Putty连接服务器 2. 例如写"hello" 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();
    }


}

}

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

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

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

type c:\path\to\file.txt

请注意,允许用户 运行 cmd.exe 可能非常危险。因此,请确保您知道自己在做什么。


在我看来,你应该实现 CommandFactory 接口。

让它创建一个 Command,将“文件”提供给 setOutputStream 提供的流。

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