java - 如何在 JSch 中设置 Java 主页以执行命令?
问题描述
我正在使用 Jcraft JSch 连接到远程机器并执行命令。由于它是一个非交互式 shell,它没有找到 Java 主页。使用 jsch 时如何设置 Java 主页?看起来像
((ChannelExec) channel).setEnv("LANG", "UTF-8");
((ChannelExec) channel).setEnv("JAVA_HOME", "/blah/java/J8.0_64/");
已弃用?
public String sendCommand(String command) {
StringBuilder outputBuffer = new StringBuilder();
try {
Channel channel = sesConnection.openChannel("exec");
((ChannelExec) channel).setEnv("LANG", "UTF-8");
((ChannelExec) channel).setEnv("JAVA_HOME", "/blah/java/J8.0_64/");
((ChannelExec) channel).setCommand(command);
InputStream commandOutput = channel.getInputStream();
channel.connect();
int readByte = commandOutput.read();
while (readByte != 0xffffffff) {
outputBuffer.append((char) readByte);
readByte = commandOutput.read();
}
channel.disconnect();
} catch (IOException ioX) {
logWarning(ioX.getMessage());
return null;
} catch (JSchException jschX) {
logWarning(jschX.getMessage());
return null;
}
return outputBuffer.toString();
}
我在执行命令时遇到的错误
JAVA_HOME 未设置,找不到 javac 来推断位置,请设置 JAVA_HOME。
解决方案
ChannelExec.setEnv
在 JSch 方面可能有效。但是假设您要连接到 OpenSSH 服务器,则必须明确配置服务器以允许您使用指令LANG
设置和JAVA_HOME
环境变量。它可能不是什么。AcceptEnv
您可以使用 PuTTY(连接 > 数据 > 环境变量)尝试相同的操作。您可能会收到“服务器拒绝设置环境变量”消息。
另请参阅当我通过传递自定义参数 ssh 登录到我的 Unix 机器时,如何设置环境变量?
无论如何,正确的解决方案是修复您的服务器配置以正确设置环境,即使对于非交互式会话也是如此。
或者作为一种肮脏的解决方法,您可以直接在命令中设置变量:
JAVA_HOME=/blah/java/J8.0_64/; java ...
推荐阅读
- tensorflow - 如何在 TensorFlow 中选择合适的 API/LSTM 单元的实现?
- reactjs - 如何使用 react-particle-js 更改粒子颜色
- python - 使用 Pandas 用键标识符转置多列
- amazon-web-services - AWS API Gateway 和 VPC 黑名单资源策略
- rspec - Rspec期望成功消息
- python - 如何在不联网的情况下安装 Python 包
- python - 将 3d * 2d 元素乘以元素
- c# - foreach / LINQ中的模型重复
- gcc - 如何在 GCC 基本 asm 中使用预处理器宏?
- python - 根据另一个数据框的条件替换列中的值