我创建了一个打开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();
}
}
}
答案 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