我正在尝试将一些文件从本地计算机复制到与我的计算机连接在同一网络中的samba服务器上。
如果我尝试通过浏览器登录或在Ubuntu网络设备文件夹中打开它没有问题,但是通过Java我似乎无法成功登录。
这是我的代码:
public static void function() throws MalformedURLException, SmbException {
String urlToBackUpFile = "smb://dlink-5e6490//Volume_1/newfolder/file.zip";
NtlmPasswordAuthentication auth = new **NtlmPasswordAuthentication("192.168.1.8", "admin", null);**
SmbFile dir = new SmbFile(urlToBackUpFile, auth);
SmbFile dest = new SmbFile("file:///home/username/file.zip");
dir.copyTo(dest);
}
我总是得到两个错误之一。
如果我只在用户名和密码字段中插入域名和 null ,我会收到此错误:
线程“main”中的异常jcifs.smb.SmbException:网络名称 无法找到。在 jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:563) 在jcifs.smb.SmbTransport.send(SmbTransport.java:663) 在jcifs.smb.SmbSession.send(SmbSession.java:238) 在jcifs.smb.SmbTree.treeConnect(SmbTree.java:176) 在jcifs.smb.SmbFile.doConnect(SmbFile.java:911) 在jcifs.smb.SmbFile.connect(SmbFile.java:957) 在jcifs.smb.SmbFile.connect0(SmbFile.java:880) 在jcifs.smb.SmbFile.copyTo(SmbFile.java:2304) 在javaapplication2.JavaApplication2.function(JavaApplication2.java:40) 在javaapplication2.JavaApplication2.main(JavaApplication2.java:48) Java结果:1
但是,如果我尝试将值“admin”插入用户名, null 或“”插入密码(有它没有管理员帐户的密码)它给了我这个错误:
线程“main”中的异常jcifs.smb.SmbAuthException:登录失败: 未知的用户名或密码错误。 在jcifs.smb.SmbSession.sessionSetup(SmbSession.java:406) 在jcifs.smb.SmbSession.send(SmbSession.java:218) 在jcifs.smb.SmbTree.treeConnect(SmbTree.java:176) 在jcifs.smb.SmbFile.doConnect(SmbFile.java:911) 在jcifs.smb.SmbFile.connect(SmbFile.java:957) 在jcifs.smb.SmbFile.connect0(SmbFile.java:880) 在jcifs.smb.SmbFile.copyTo(SmbFile.java:2303) 在javaapplication2.JavaApplication2.function(JavaApplication2.java:40) 在javaapplication2.JavaApplication2.main(JavaApplication2.java:48) Java结果:1
我在NtlmPasswordAuthentication行中尝试了各种组合,比如......
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("192.168.1.8", null, null);
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("192.168.1.8", "admin", null);
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("192.168.1.8", "admin", "");
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("smb://dlink-5e6490/", null, null);
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("smb://dlink-5e6490/", "admin", null);
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("smb://dlink-5e6490/", "admin", "");
......但似乎没什么用。
有谁知道问题出在哪里?
答案 0 :(得分:0)
我最终使用Linux命令来完成这项任务:
String command = "mount -o password=\"" + serverPassword + "\" -t cifs //192.168.1.8/Volume_1 /mnt/files/";
String[] cmd = {"/bin/bash", "-c", ("echo " + sudoPassword + "| sudo -S " + command)};
Runtime.getRuntime().exec(cmd);
不建议以这种方式使用sudo,但这是我设法使其工作的唯一方法。