Java 如何在Active choice参数中通过SSH从远程系统获取文件

Java 如何在Active choice参数中通过SSH从远程系统获取文件,java,jenkins,groovy,jenkins-pipeline,jenkins-groovy,Java,Jenkins,Groovy,Jenkins Pipeline,Jenkins Groovy,我需要从远程系统获取文件并显示在下拉框中。我正在groovy脚本中使用activechoice参数,但无法连接到SSH并获取远程文件 下面是我在活动选项参数中执行的脚本 def sout = new StringBuffer(), serr = new StringBuffer() def proc = "sshpass -p 'password' ssh -p 22 username@hostname ls -l".execute() proc.consumeProcessOutput(sou

我需要从远程系统获取文件并显示在下拉框中。我正在groovy脚本中使用activechoice参数,但无法连接到SSH并获取远程文件

下面是我在活动选项参数中执行的脚本

def sout = new StringBuffer(), serr = new StringBuffer()
def proc = "sshpass -p 'password' ssh -p 22 username@hostname ls -l".execute()
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
return sout.tokenize()

一种更健壮的方法是使用一个(Java)库来处理SSH,比如JSCH(),如下所示:


你的问题是什么?你有错误吗?也不要使用String.execute()-而是使用Array.execute()。使用字符串,groovy将只在空白处拆分;另外,
是错误的-您不需要为从未涉及的shell报价。如果您的密码包含空格,这和
是您的问题。使用
[“sshpass”、“-p”、“password”、…]执行()
JSch jsch = new JSch();
Session session = jsch.getSession("$username","$host", 22);
session.setPassword("password");

// Avoid asking for key confirmation 
// depends on your needs but given your use case it might be a good idea
Properties prop = new Properties();
prop.put("StrictHostKeyChecking", "no");
session.setConfig(prop);

session.connect();

ChannelExec channelssh = (ChannelExec)session.openChannel("exec");
channelssh.setCommand("ls -l"); // restore date
channelssh.connect();

InputStream is=channel.getInputStream();
is.eachLine {
    println(it)
}
channelssh.disconnect();