如何用 Java 连接到 SSH 服务器?我不需要/想要外壳。我只想连接到 SSH 服务器并获取
file.txt
的内容。我怎样才能做到这一点?
使用JSch
import com.jcraft.jsch.*;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Scanner;
/**
* @author World
*/
public class SSHReadFile {
public static void main(String args[]) {
String user = "john";
String password = "mypassword";
String host = "192.168.100.23";
int port = 22;
String remoteFile = "/home/john/test.txt";
try {
JSch jsch = new 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.");
ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();
System.out.println("SFTP Channel created.");
InputStream inputStream = sftpChannel.get(remoteFile);
try (Scanner scanner = new Scanner(new InputStreamReader(inputStream))) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
}
} catch (JSchException | SftpException e) {
e.printStackTrace();
}
}
}
输出:
Establishing Connection...
Connection established.
Crating SFTP Channel.
SFTP Channel created.
This is content from file /home/john/test.txt
Java 本身不支持这一点,但您可以使用像 JSch 这样的库来做到这一点
您必须使用第三方库 - JSch 就是其中之一。谷歌“
Java ssh
”,你会得到很多其他的选择。
http://www.ganymed.ethz.ch/ssh2/ 用 Java 实现了 ssh2 客户端。我用它来进行端口转发。
你可以查看JSSH,这是一个Java SSH库。
看看Jaramiko。
不是 100% 确定,但我相信套接字与 ssh 连接有很大关系,除非您尝试执行预安装的命令操作应用程序。您可以使用许多外部包来实现此目标,但如果您想创建自己的套接字,则需要大量的读取和解密/加密才能完成此任务。
如果没有使用正确的协议和安全规范正确完成,创建自己的套接字也是危险的,因此在您 100% 确定您有能力致力于学习足够的知识之前,请谨慎这样做。
我用过这个并为我工作
ChannelExec channel=(ChannelExec)session.openChannel("exec");
String command = "Your Command here";
channel.setCommand(command);
InputStream in=channel.getInputStream();
channel.setErrStream(System.err);
channel.connect();