1

我正在尝试以java -version下列方式使用 ssh 在远程 linux 机器上运行-

ssh ravi@192.168.3.90 "java -version"

我越来越bash: java: command not found。但是 java 安装在远程机器上,我JAVA_HOME将文件 ie/etc/profile~/.bashrc. 我可以java -version直接在它上面运行。

为什么?我的目标是获取 java 版本。在远程 linux 机器上获取已安装 java 的版本需要进行哪些更改?

4

5 回答 5

2

向你展示了什么ssh ravi@192.168.3.90 "which java"。似乎从 PATH 中找不到 java。

于 2013-04-18T16:22:50.453 回答
2

这与 Java 无关。它主要是关于 SSH。当您使用 SSH 运行命令时,您实际上是使用特定环境连接到远程机器。在您的情况下使用 user ravi。我相信这个用户没有javaPATH他的配置文件脚本中定义他的变量(例如.bachrc)。

尝试运行ssh ravi@192.168.3.90 "echo $PATH"并查看 java 不存在。

现在的问题是你想要什么。如果您只想运行 java 使用绝对路径。如果您希望能够使用命令行运行 java,请将 java 添加到PATH您正在使用的用户帐户。

于 2013-04-18T16:25:26.597 回答
2

我在为 java 应用程序构建 jenkins 管道时遇到了同样的问题,如下所示。

Jenkins-Machine-->Remote_server(Build server)

当我试图从 jenkins 机器运行“which java”cmd 到远程服务器时,它会为我的应用程序构建 jar 文件。

$ ssh -i id_rsa ubuntu@REMOTE_MACHINE 'which java'

它产生空响应。

当我在远程机器上 ssh 并输入以下命令时

$ which java
/usr/lib/jvm/jdk-12.0.2/bin/java

然后我发现 jenkins 服务器正在远程服务器上寻找 /usr/bin/java ,我发现 /usr/bin/java 不存在。

所以我使用远程服务器上的 jdk 文件夹为 /usr/bin/java 创建了符号链接

$ sudo ln -s /usr/lib/jvm/jdk-12.0.2/bin/java /usr/bin/java
于 2019-08-01T13:49:51.473 回答
1

您需要该java命令PATH位于远程计算机上。如果不是,您将需要使用绝对文件路径运行它。

于 2013-04-18T16:22:35.680 回答
1

如果在 .bashrc 和 .profile 或 /etc/bash.bashrc 中都设置了 JAVA_HOME 后它不起作用。您可以参考这个答案How do I set $PATH such that ssh user@host commandworks?

在这个答案中,您实际上仅在 .bashrc 中设置了 JAVA_HOME,但在哪个位置,这很重要。在我的 Ubuntu16.04 中,它确实有效!

于 2018-08-21T06:59:08.720 回答