对 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
我创建了一个正在打开的 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