[英]Java ssh connection in Windows and Linux
我正在嘗試使用Java應用程序連接到SSH,但是我沒有太大的成功,因為它會帶來意外錯誤。 我的應用程序正在Windows計算機上運行,但是我試圖連接到Fedora 29 linux服務器。 導入信息只是改變了。 順便說一句,我不僅需要連接,還需要這段代碼在該終端上執行命令。
我已經有了連接,但是在第22行給出了錯誤。
"package teste;
import com.jcraft.jsch.*;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Scanner;
public class SSHReadFile { public static void main(String args[]) { String user = "root";
String password = "xxxxxxx";
String host = "000.000.000.000";
int port = 22;
String remoteFile = "/home";
try { JSch jsch = new JSch();
com.jcraft.jsch.Session session = jsch.getSession(user, host, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
System.out.println("Establishing Connection...");
session.connect(); System.out.println("Connection established.");
System.out.println("Crating SFTP Channel.");
Channel sftpChannel = session.openChannel("sftp");
sftpChannel.connect();
System.out.println("SFTP Channel created.");
InputStream inputStream = sftpChannel.get("/home");
try (Scanner scanner = new Scanner(new InputStreamReader(inputStream))) { while (scanner.hasNextLine()) { String line = scanner.nextLine();
System.out.println(line); } } } catch (JSchException e) { }
}
public class Session {
public Session() {
}
public void setConfig(String strictHostKeyChecking, String no) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
public void setPassword(String password) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
public class ChannelSftp {
public ChannelSftp() {
}
public void connect() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
public InputStream get(String remoteFile) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
}"
線程“主”中的異常java.lang.RuntimeException:無法編譯的源代碼-錯誤的符號類型:teste_ls.SSHReadFile.main(SSHReadFile.java:22)的com.jcraft.jsch.Channel.get
Channel sftpChannel = session.openChannel("sftp");
...
InputStream inputStream = sftpChannel.get("/home");
線程“主”中的異常java.lang.RuntimeException:無法編譯的源代碼-錯誤的符號類型:teste_ls.SSHReadFile.main(SSHReadFile.java:22)的com.jcraft.jsch.Channel.get
您的直接問題是,您已將變量sftpChannel
聲明為純Channel
而不是ChannelSftp
。 因此,您只能調用Channel
類定義的方法。 Channel
沒有名為get()
的方法,因此會出現編譯器錯誤。
您要調用ChannelSftp.get()
,因此應將變量定義為ChannelSftp
:
ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
...
InputStream inputStream = sftpChannel.get("/home");
您可能遇到的下一個問題是“ / home”可能是一個目錄,我認為您不能將目錄作為輸入流。 如果您試圖獲取目錄中的文件列表,請調用SftpChannel.ls()
:
for (LsEntry entry : (Vector<LsEntry>) SftpChannel.ls("/home")) {
System.out.println(entry.getFilename());
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.