【问题标题】:How to open linux terminal from java and be able to execute commands in it?如何从 java 打开 linux 终端并能够在其中执行命令?
【发布时间】:2015-07-22 23:47:57
【问题描述】:

我想编写一个通过 ssh 连接到远程机器并安装预定义软件的程序。此外,我想通过让用户看到所有内容来为用户明确安装过程。我遇到了一些问题:如何从 java 打开终端并向其发送命令?(OutputStream 不起作用)当我已经 ssh 时如何在此终端中执行命令?我想在远程机器上运行本地脚本并允许用户?在脚本运行时与终端交互(例如接受软件许可等)。

我正在尝试这样的事情,但它不起作用。

    Runtime runtime = Runtime.getRuntime();
    Process process = runtime.exec("x-terminal-emulator -e ./script.sh");

【问题讨论】:

标签: java linux bash shell ssh


【解决方案1】:

理论上是可以的。您需要一个 java 库,例如 JSch,通过 ssh 直接与终端交互,然后使用 screen 实用程序在您的 java prog 和用户之间共享单个终端屏幕。

来自您的 java 程序:

screen -d -m -S shared
screen -rx shared
<type your installation commands>

来自远程用户:

screen -rx shared

当然,远程用户必须等到 java prog 初始化屏幕才能附加到它。

请注意,当您让用户interact 使用屏幕时,各种事情都会出错。你的程序必须足够聪明才能处理它。

【讨论】:

  • 谢谢,但你能更准确地解释一下如何使用屏幕实现这个吗?
  • 我添加了一个更详细的使用screen 进行共享会话的示例。您实际上可以通过打开到同一主机的 2 个 ssh 连接并运行这些命令来手动尝试。对于如何从 Java 中执行此操作,您需要参考 JSch 文档。如果应该补充一点,我从未尝试过这种特殊情况。
  • 顺便说一句,我错过了我的回答中的一些基本假设,例如 prog 和用户都以同一个用户登录到同一个 SSH 主机;)
猜你喜欢
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
  • 2014-07-02
  • 2020-05-14
  • 2018-02-03
  • 2016-10-20
  • 1970-01-01
相关资源
最近更新 更多