我正在编写一个应该ssh到IP并运行shell脚本代码的Java程序。
问题是脚本太长,应该由java代码携带。
我使用了sshxcute库。
我有两个解决方案:
将所有脚本逐行放到JAVA代码中作为字符串并立即执行它们(如何做?)或将该脚本代码分离为80行作为字符串并逐个在JAVA中运行。 (我不认为这是一种有效的方式!但我知道如何做到这一点的唯一方法)
将该shell脚本代码放在JAVA文件中并由JAVA执行(我不知道该怎么做。)。我应该把它放在哪里(主要包裹?)以及要解决的问题?
答案 0 :(得分:1)
最简单的方法是在远程计算机上启动ssh会话,然后将命令发送到它:
// start ssh session to machine alan
Process p = new ProcessBuilder("ssh", "alan").start();
// get a means of reading its output
final Scanner reader = new Scanner(p.getInputStream());
// start a new thread going to read its output
Thread readThread = new Thread(new Runnable() {
public void run() {
while (reader.hasNextLine())
System.out.println(reader.nextLine());
reader.close();
}
});
readThread.start();
// get a means of sending it commands
PrintWriter writer = new PrintWriter(p.getOutputStream());
// send some commands
writer.println("touch /tmp/somefile");
writer.println("hostname");
writer.println("ls -l /home");
writer.println("uptime");
writer.println("exit");
writer.close();
// wait for reading thread to finish
readThread.join();
启动进程,并登录到远程计算机。然后它启动一个新线程来读取进程的输出(就你的程序而言,这是一个输入流),并创建一个可用于发送命令的PrintWriter
(这是进程的输入,但是对于程序而言是输出流)。
当我在笔记本电脑上运行时,我得到了
alan
total 20
drwx------ 65 james james 4096 Oct 16 21:50 james
drwx------ 2 root root 16384 Apr 1 2014 lost+found
23:12:13 up 6 days, 8:46, 5 users, load average: 0.19, 0.19, 0.20
,正如您所看到的,是我发送的命令的输出。