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))将为您提供进程的输出流。之后,您将密码输入到该编写器,但它没有以这种方式连接到流程输出(即使这样,它也将是错误的,因为您将发布到流程的输出)