0

我知道有AntBuilderandJSch等,但我想做这样的事情 - 没有任何依赖:

def sshArray = ["ssh root@11.11.11.11 -p 111 '/etc/init.d/tomcat7 stop'", ...]

def env = System.getenv().collect { k,v -> "$k=$v" }

sshArray.each {
    println "Executing: " + it
    def process = (it).execute(env, null)
    def writer = new PrintWriter(new BufferedOutputStream(process.out))
    writer.println("mypassword")
    writer.close()
    process.waitFor()
    process.consumeProcessOutput(System.out, System.err)
}

但这很遗憾不起作用,因为我得到的输出是:

Executing: ssh root@11.11.11.11 -p 111 '/etc/init.d/tomcat7 stop'
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
...

此外,如果我注释掉这些行,我会得到相同的输出:

def writer = new PrintWriter(new BufferedOutputStream(process.out))
writer.println("mypassword")
writer.close()

为什么我会收到 3 次“权限被拒绝”?如何为 ssh 进程提供密码?这可能吗?

4

2 回答 2

4

像 ssh 这样的程序通常不会从它们的标准输入中读取密码。他们直接从终端读取。Java 和 groovy 不提供任何方式来控制终端。

这不是 ssh 或 Java 的问题:密码是由人输入的。如果您的程序需要使用 ssh,则使用它的正确方法是使用基于密钥的身份验证。

于 2013-06-14T19:41:53.947 回答
0

抱歉,但我认为您正在做的是启动一个进程,然后使用它的输出(process.out)。您应该为流程提供输入。它应该是您正在处理的InputStream 。

于 2013-11-21T15:57:28.993 回答