Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy-执行ssh并提供密码_Groovy_Ssh - Fatal编程技术网

Groovy-执行ssh并提供密码

Groovy-执行ssh并提供密码,groovy,ssh,Groovy,Ssh,我知道有AntBuilder和JSch等,但我想做这样的事情-没有任何依赖性: 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).exe

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

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()
为什么我三次被“拒绝许可”?如何向ssh进程提供密码?
这可能吗?

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


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

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


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

对不起,但我认为您所做的是启动一个进程,然后使用其输出(process.out)。您应该将输入提供给流程。它应该是您正在处理的输入流。

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

我认为已发布的脚本与您的想法相差不大。def writer=new PrintWriter(new BufferedOutputStream(process.out))将为您提供进程的输出流。在那之后,你把你的密码输入到那个编写器,但是它没有以这种方式连接到进程输出(即使这样,它也会是错误的,因为你会发布到进程的输出),我不认为发布的脚本会像你想的那样。def writer=new PrintWriter(new BufferedOutputStream(process.out))将为您提供进程的输出流。之后,您将密码输入到该编写器,但它没有以这种方式连接到流程输出(即使这样,它也将是错误的,因为您将发布到流程的输出)