独立运行代码和战争内部代码时的不同结果

时间:2016-02-05 12:39:38

标签: java linux shell

如果我把java文件放在任何文件夹中(不是通过war运行),下面的代码运行就好了

new ProcessBuilder("ssh b15h278@my.host.com \"echo success\"").start();

我得到了成功"。但如果我将代码部署为战争,它将给我"权限被拒绝(公钥)。"。我已在目标主机中注册了密钥。

1 个答案:

答案 0 :(得分:1)

要建立有效的SSH连接,您需要在要尝试登录的系统上使用公钥,并在本地系统上使用私钥。默认情况下," ssh"命令将在" $ HOME / .ssh"

中查找私钥

我怀疑这里的问题是当你运行" ssh"从webapp,你实际上是作为一个不同的用户运行(例如" tomcat"),而$HOME指的是没有" .ssh"的目录。子目录。

尝试给出" ssh"一个明确的" -i"具有私钥文件的(绝对)路径的参数。另外,确保文件可以被" tomcat"用户(或其他任何东西)。 (通常的做法是在" $ HOME / .ssh"目录上设置权限,以便其他用户/组无法读取它。)