【问题标题】:different result when run code independently and code inside war独立运行代码和战争中的代码时结果不同
【发布时间】:2016-02-05 12:39:37
【问题描述】:

如果我将 java 文件放在任何文件夹中(不是通过 war 运行),以下代码就可以正常运行

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

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

【问题讨论】:

  • 当您自己运行代码时,您以什么用户 ID 运行它?当它在 WAR 中运行(并且失败)时,它以什么用户 ID 运行?您是否已采取措施确保它在两种情况下都使用相同的密钥?

标签: java linux shell


【解决方案1】:

要建立有效的 SSH 连接,您需要在您尝试登录的系统上有一个公钥,在本地系统上需要一个私钥。默认情况下,“ssh”命令会在“$HOME/.ssh”中查找私钥

我怀疑这里的问题是,当您从 webapp 运行“ssh”时,您实际上是以不同的用户身份运行(例如“tomcat”),而 $HOME 指的是没有“.ssh”的目录" 子目录。

尝试给“ssh”一个显式的“-i”参数和私钥文件的(绝对)路径。此外,请确保该文件可由“tomcat”用户(或其他任何用户)读取。 (通常的做法是设置“$HOME/.ssh”目录的权限,这样其他用户/组就无法读取它。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    相关资源
    最近更新 更多