使用Groovy连接linux sFTP服务器

时间:2017-09-29 07:55:47

标签: file permissions sftp

我正在尝试运行以下Groovy脚本,这些脚本打算在linux服务器上将文件权限更改为777 -

@GrabConfig(systemClassLoader = true)
@Grab(group="com.jcraft", module="jsch", version="0.1.46")
import com.jcraft.jsch.*;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.ChannelSession;
import java.io.InputStream;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Vector;    
java.util.Properties config = new java.util.Properties()

config.put "StrictHostKeyChecking", "no"
JSch ssh = new JSch();
Session session = null;
Session sess = ssh.getSession ("USERNAME", "HOST", 22);
sess.with {
setConfig config
setPassword ("PASSWORD");
connect()
Channel chan = openChannel ("sftp");
chan.connect()
ChannelSftp sftp = (ChannelSftp) chan;

"chmod 777".execute(null, new File("WORKING DIRECTORY\Test_ftpuser_place.txt"))

chan.disconnect()
disconnect()
}

此外,我尝试使用以下命令而不是Chmod,但它仍无效。

builder = new AntBuilder()
builder.chmod(dir:"WORKING DIRECTORY", perm:'+rwxrwxrwx', includes:'Test_ftpuser.txt')

我在运行脚本的前一部分时遇到此错误 -

java.io.IOException: Cannot run program "chmod": CreateProcess error=2, The system cannot find the file specified

    at java_lang_Runtime$exec$0.call(Unknown Source)

    at ConsoleScript45$_run_closure1.doCall(ConsoleScript45:45)

    at ConsoleScript45.run(ConsoleScript45:18)

Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified

    ... 3 more

有人可以帮我解决这个问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

见这一行:

  

" chmod 777" .execute(null,new File(" WORKING DIRECTORY \ Test_ftpuser_place.txt"))

"执行"中的第二个参数method表示当前工作目录(请参阅文档here)。您正在使用它来代表您希望更改的文件,我认为这不是它的目的。

首先尝试创建文件,然后更改其权限。您也可以使用methods on the File object来设置这些内容,而无需使用" process" .execute():

def myFile = new File("path/to/file")
myFile.write("Hello World")
myFile.setReadable(true, false)
myFile.setWritable(true, false)
myFile.setExecutable(true, false)