如何从java应用程序在远程机器上运行perl脚本?

时间:2011-05-30 21:50:44

标签: java perl

您好我正在使用Java应用程序。我需要从本地机器(windows)执行一个perl脚本(linux),它位于java应用程序的远程机器中。我需要自动完成这个过程,没有手动交互。现在我将清楚地解释这个过程,目前运行perl脚本,我只需打开putty窗口,连接到远程机器并执行perl脚本。

现在我想通过点击按钮自动完成上面说明的过程。因此,当我单击一个按钮时,它应该调用一个连接到远程机器的函数,然后执行perl脚本。请帮我解决这个问题。我希望尽快在java中使用这段代码。

2 个答案:

答案 0 :(得分:2)

您可以使用与手动库相同的步骤,通过使用ssh库,您可以创建与服务器的安全连接并执行所需的脚本。

这个question列出了一些你可以使用的java ssh库。

答案 1 :(得分:0)

导入Jcraft jar并运行以下代码:

package package1;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;


public class ConnExec 
{
    public void connExec()
    {
        String host="devHostIP.sName.dev";
        String user="UN";
        String password="PWD";
        String commandStr = "ls /local/dev/folder/inbound";
        String line;

        try
        {
            java.util.Properties config = new java.util.Properties(); 
            config.put("StrictHostKeyChecking", "no");
            JSch jsch = new JSch();
            Session session=jsch.getSession(user, host, 22);
            session.setPassword(password);
            session.setConfig(config);
            session.connect();
            System.out.println("Connected to the server.....\n");

            Channel channel=session.openChannel("exec");
            channel.setInputStream(null);
            ((ChannelExec)channel).setCommand(commandStr);

            InputStream in=channel.getInputStream();
            channel.connect();

            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            while ((line = reader.readLine()) != null)
            {
                System.out.println(line.toString());
            }

            channel.disconnect();
            session.disconnect();
            System.out.println("Terminated.....\n");

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

    }

}