与 Java 的 SSH 连接

问题描述 投票:0回答:8

如何用 Java 连接到 SSH 服务器?我不需要/想要外壳。我只想连接到 SSH 服务器并获取

file.txt
的内容。我怎样才能做到这一点?

java ssh connection
8个回答
50
投票

使用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

5
投票

Java 本身不支持这一点,但您可以使用像 JSch 这样的库来做到这一点


1
投票

您必须使用第三方库 - JSch 就是其中之一。谷歌“

Java ssh
”,你会得到很多其他的选择。


1
投票

http://www.ganymed.ethz.ch/ssh2/ 用 Java 实现了 ssh2 客户端。我用它来进行端口转发。


1
投票

你可以查看JSSH,这是一个Java SSH库。


0
投票

看看Jaramiko


0
投票

不是 100% 确定,但我相信套接字与 ssh 连接有很大关系,除非您尝试执行预安装的命令操作应用程序。您可以使用许多外部包来实现此目标,但如果您想创建自己的套接字,则需要大量的读取和解密/加密才能完成此任务。

如果没有使用正确的协议和安全规范正确完成,创建自己的套接字也是危险的,因此在您 100% 确定您有能力致力于学习足够的知识之前,请谨慎这样做。


-3
投票

我用过这个并为我工作

ChannelExec channel=(ChannelExec)session.openChannel("exec");
String command = "Your Command here";
channel.setCommand(command);

InputStream in=channel.getInputStream();
channel.setErrStream(System.err);
channel.connect();
© www.soinside.com 2019 - 2024. All rights reserved.