java远程执行linux命令行

worktile 其他 41

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Java提供了执行Shell命令的方式,可以通过使用Java的ProcessBuilder类来实现远程执行Linux命令行的功能。下面给出一个示例代码,演示如何使用Java远程执行Linux命令行:

    “`java
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;

    public class RemoteCommandExecutor {
    public static void main(String[] args) {
    String hostname = “远程主机名或IP地址”;
    String username = “登录用户名”;
    String password = “登录密码”;
    String command = “要执行的Linux命令”;

    try {
    // 在本地执行命令:ssh 用户名@远程主机名或IP地址 ‘要执行的Linux命令’
    ProcessBuilder processBuilder = new ProcessBuilder(“ssh”, username + “@” + hostname, command);

    // 设置密码
    processBuilder.environment().put(“SSHPASS”, password);

    // 启动进程
    Process process = processBuilder.start();

    // 获取命令输出
    InputStream inputStream = process.getInputStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    String line;
    while ((line = reader.readLine()) != null) {
    System.out.println(line);
    }

    // 等待命令执行完成
    int exitCode = process.waitFor();

    // 输出命令执行结果
    System.out.println(“Command execution completed with exit code: ” + exitCode);

    } catch (IOException | InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    “`

    在示例代码中,首先指定远程主机的主机名(或IP地址)、登录用户名和密码,然后设置要执行的Linux命令。使用ProcessBuilder类创建一个新的进程,并传入ssh命令和参数,然后通过调用environment()方法设置环境变量来传递密码。启动进程后,通过获取进程的输入流,并使用BufferedReader读取输入流中的输出,将输出打印到控制台。最后,调用waitFor()方法等待命令执行完成,并输出命令执行的退出代码。

    通过以上示例代码,你可以在Java中实现远程执行Linux命令行的功能,只需将远程主机名(或IP地址)、登录用户名和密码以及要执行的Linux命令进行相应的设置即可。

    2年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    在Java中远程执行Linux命令行可以通过使用SSH(Secure Shell)协议实现。SSH是一种网络协议,用于在不安全的网络上安全地执行命令和传输文件。以下是实现该功能的几种方法:

    1. 使用JSch库:JSch是一个纯Java实现的SSH客户端库,可以帮助我们在Java程序中远程执行Linux命令。使用JSch库,我们需要创建一个SSH连接,并通过该连接发送命令到远程服务器上执行。以下是一个简单的示例代码:

    “`
    import com.jcraft.jsch.*;

    public class SSHExample {
    public static void main(String[] args) {
    String host = “remote_server”;
    String user = “username”;
    String password = “password”;
    int port = 22;

    try {
    JSch jsch = new JSch();
    Session session = jsch.getSession(user, host, port);
    session.setPassword(password);
    session.setConfig(“StrictHostKeyChecking”, “no”);
    session.connect();

    Channel channel = session.openChannel(“exec”);
    ((ChannelExec) channel).setCommand(“ls -l”);

    channel.setInputStream(null);
    ((ChannelExec) channel).setErrStream(System.err);

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

    byte[] tmp = new byte[1024];
    while (true) {
    while (in.available() > 0) {
    int i = in.read(tmp, 0, 1024);
    if (i < 0) break; System.out.print(new String(tmp, 0, i)); } if (channel.isClosed()) { if (in.available() > 0) continue;
    System.out.println(“exit-status: ” + channel.getExitStatus());
    break;
    }

    try {Thread.sleep(1000);} catch (Exception ee) {}
    }

    channel.disconnect();
    session.disconnect();
    } catch (JSchException | IOException e) {
    e.printStackTrace();
    }
    }
    }
    “`

    2. 使用Apache Commons-Net库:Apache Commons-Net是Apache软件基金会提供的一个用于支持各种Internet协议的Java库。其中包含了一个用于SSH协议的组件,可以在Java程序中执行远程命令。以下是一个使用Apache Commons-Net库的示例代码:

    “`
    import org.apache.commons.net.*;
    import java.io.InputStream;

    public class SSHExample {
    public static void main(String[] args) {
    String host = “remote_server”;
    String user = “username”;
    String password = “password”;
    int port = 22;

    try {
    SSHClient client = new SSHClient();
    client.addHostKeyVerifier(new PromiscuousVerifier());
    client.connect(host, port);
    client.authPassword(user, password);

    Session session = client.startSession();
    Command cmd = session.exec(“ls -l”);

    InputStream in = cmd.getInputStream();
    byte[] buffer = new byte[1024];
    int length;

    while ((length = in.read(buffer)) != -1) {
    System.out.write(buffer, 0, length);
    System.out.flush();
    }

    cmd.join(5, TimeUnit.SECONDS);
    session.close();
    client.disconnect();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    “`

    请注意,无论使用哪种方法,都需要提供正确的主机名(hostname)、用户名(username)、密码(password)和端口号(port)来建立与远程服务器的连接,并通过执行相应的命令来获取命令的输出。在示例代码中,我们执行了一个简单的`ls -l`命令并将结果打印到控制台上。

    此外,还可以使用其他第三方库,如SSHJ、JCraft等来实现远程执行Linux命令的功能。这些库提供了更多的功能和选项,可以根据需求选择合适的库来使用。但无论选择哪种方法,都需要确保远程服务器上已安装并启动了SSH服务,并且提供正确的认证信息来建立连接。

    2年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Java通过SSH协议远程执行Linux命令行,可以借助第三方库JSch来实现。

    下面是一种方法,可以帮助你在Java中远程执行Linux命令行。

    1. 导入JSch库

    首先,你需要在Java工程中导入JSch库。你可以下载JSch库的jar文件,并将其添加到你的项目中,或者使用构建工具如Maven或Gradle来管理依赖。

    2. 建立SSH连接

    在Java代码中,你需要建立一个SSH连接到目标Linux服务器。首先,创建一个JSch对象,并使用`session.setConfig`方法配置连接的相关参数(如用户名、密码等)。

    “`java
    String username = “your_username”;
    String password = “your_password”;
    String hostname = “your_hostname”;
    int port = 22; // 默认SSH端口为22

    JSch jsch = new JSch();
    Session session = jsch.getSession(username, hostname, port);
    session.setConfig(“StrictHostKeyChecking”, “no”); // 忽略主机的密钥检查
    session.setPassword(password);

    session.connect();
    “`

    3. 执行命令

    在建立了SSH连接后,你可以使用`session.openChannel`方法打开一个SSH通道,并建立一个Shell通道来执行命令。

    “`java
    ChannelExec channel = (ChannelExec) session.openChannel(“exec”);
    channel.setCommand(“your_command”); // 要执行的命令

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

    byte[] buffer = new byte[1024];
    while (in.read(buffer) != -1) {
    System.out.println(new String(buffer));
    }
    “`

    在这个例子中,我们将命令执行的输出打印到控制台。你也可以将其保存到文件或进行其他处理。

    4. 关闭连接

    当命令执行完成后,记得关闭SSH连接。

    “`java
    channel.disconnect();
    session.disconnect();
    “`

    这样,你就可以在Java中远程执行Linux命令行了。请注意,为了保证安全性,建议使用SSH密钥认证替代密码认证。

    此外,还有其他的第三方库可以实现类似的功能,例如Apache Commons Net库中的SSH类也可以用于远程执行Linux命令行。你可以选择适合自己的库来实现需求。

    2年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部