Java连接SSH的库

简介: Java连接SSH的库

是的,除了 JSch,还有其他一些与 SSH 连接相关的 Java 库:

1. Apache Commons Net:这是一个提供了一系列网络通信工具的库,其中包括一个 SSH 客户端实现。它支持 SSH1 和 SSH2,并提供了基于 Java 的安全连接和文件传输功能。

2. J2SSH:这是一个用于 SSHv2 的 Java 实现,它提供了一个功能齐全的 SSH 客户端和服务器解决方案。它支持各种协议和功能,包括加密算法、身份验证、文件传输等。

3. JS一道:这是一个轻量级的 SSH 客户端库,支持 SSH1 和 SSH2。它提供了基于 Java 的安全连接和文件传输功能,并具有简单的 API。

4. Secure Shell for Java:这是一个基于 Java 的 SSH 客户端库,支持 SSH1 和 SSH2。它提供了安全的连接、文件传输和命令执行等功能,并具有可扩展性。

5.Jsch 这是一个基于 Java 的 SSH 客户端库,

这些库都提供了不同的功能和特性,可以根据具体需求选择适合的库来实现 SSH 连接。

 

<dependency>  
  <groupId>commons-net</groupId>  
  <artifactId>commons-net</artifactId>  
  <version>3.8.0</version> <!-- 请检查是否有更新的版本 -->  
</dependency>
import org.apache.commons.net.ssh.SshClient;  
import org.apache.commons.net.ssh.channel.ChannelExec;  
import org.apache.commons.net.ssh.channel.ChannelShell;  
import org.apache.commons.net.ssh.connection.Session;  
import org.apache.commons.net.ssh.util.Util;  
  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.nio.charset.StandardCharsets;  
import java.util.concurrent.TimeUnit;  
  
public class SshExample {  
    public static void main(String[] args) {  
        String host = "your-server-host";  
        int port = 22; // 通常 SSH 端口为 22  
        String username = "your-username";  
        String password = "your-password";  
        String directoryPath = "/path/to/directory"; // 要切换到的目录路径  
  
        try (SshClient client = new SshClient()) {  
            client.setUseCompression(true);  
            client.connect(host, port, username, password);  
            client.setPassword(password); // 对于基于密码的认证,需要再次设置密码  
            client.setUseCompression(true); // 可选,启用压缩以减少传输的数据量  
            client.setTimeout(30, TimeUnit.SECONDS); // 可选,设置超时时间(以秒为单位)  
            client.setKeepAliveInterval(30, TimeUnit.SECONDS); // 可选,设置 Keep-Alive 间隔(以秒为单位)  
            client.setIdleTimeout(60, TimeUnit.SECONDS); // 可选,设置空闲超时时间(以秒为单位)  
            Session session = client.newSession(); // 创建 SSH 会话  
            session.setConfig("StrictHostKeyChecking", "no"); // 可选,禁用严格主机密钥检查(不推荐在生产环境中使用)  
            session.setCommand("cd " + directoryPath); // 设置要执行的命令(这里是切换到指定目录)  
            session.connect(); // 连接到 SSH 会话  
            try (InputStream in = session.getInputStream(); // 获取输入流以读取命令输出  
                 OutputStream out = session.getOutputStream()) { // 获取输出流以发送命令到服务器  
                byte[] buffer = new byte[4096]; // 缓冲区,用于读取命令输出和发送命令输入  
                int bytesRead; // 读取的字节数  
                while ((bytesRead = in.read(buffer)) != -1) { // 读取命令输出直到结束标志(-1)或超时(如果设置了超时)  
                    out.write(buffer, 0, bytesRead); // 将命令输出发送回服务器(如果有的话)  
                }  
            } finally {  
                session.disconnect(); // 断开 SSH 会话连接(在最后离开程序之前执行)  
            }  
        } catch (IOException e) { // 处理异常(如连接失败、认证失败等)或错误情况下的代码逻辑等)例如:记录日志、抛出运行时异常等)这里仅做演示用途,请根据实际情况进行调整。注意捕获并处理所有异常以确保程序的稳定性和安全性。在实际的生产环境中,您可能希望进行更详细的处理,例如记录日志、发送警报等。同时,不要忘记处理所有可能的异常情况。例如,您可以捕获 `IOException` 来处理网络连接或认证问题。
import org.apache.commons.net.ssh.SshClient;  
import org.apache.commons.net.ssh.channel.ChannelShell;  
import org.apache.commons.net.ssh.connection.Session;  
import org.apache.commons.net.ssh.util.Util;  
  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.nio.charset.StandardCharsets;  
import java.util.concurrent.TimeUnit;  
  
public class SshExample {  
    public static void main(String[] args) {  
        String host = "your-server-host";  
        int port = 22; // 通常 SSH 端口为 22  
        String username = "your-username";  
        String password = "your-password";  
        String shellCommand = "ls -l"; // 要执行的交互式命令  
  
        try (SshClient client = new SshClient()) {  
            client.setUseCompression(true);  
            client.connect(host, port, username, password);  
            client.setPassword(password); // 对于基于密码的认证,需要再次设置密码  
            client.setUseCompression(true); // 可选,启用压缩以减少传输的数据量  
            client.setTimeout(30, TimeUnit.SECONDS); // 可选,设置超时时间(以秒为单位)  
            client.setKeepAliveInterval(30, TimeUnit.SECONDS); // 可选,设置 Keep-Alive 间隔(以秒为单位)  
            client.setIdleTimeout(60, TimeUnit.SECONDS); // 可选,设置空闲超时时间(以秒为单位)  
            Session session = client.newSession(); // 创建 SSH 会话  
            session.setConfig("StrictHostKeyChecking", "no"); // 可选,禁用严格主机密钥检查(不推荐在生产环境中使用)  
            session.setCommand(shellCommand); // 设置要执行的命令(这里是切换到指定目录)  
            session.connect(); // 连接到 SSH 会话  
            try (ChannelShell channelShell = session.openChannel("shell")) { // 创建 Shell 类型的 Channel,用于交互式命令执行  
                channelShell.setInputStream(System.in); // 设置输入流(用于接收用户输入)  
                channelShell.setOutputStream(System.out); // 设置输出流(用于发送命令输出)  
                channelShell.connect(); // 连接到 Shell Channel  
                // 这里可以通过控制台(或用户界面)与命令进行交互了,直到命令执行完成或用户中断连接。  
                // 注意:这里没有关闭连接或输入流的代码,因为这通常在用户退出或程序结束时自动完成。  
            } finally {  
                session.disconnect(); // 断开 SSH 会话连接(在最后离开程序之前执行)  
            }  
        } catch (IOException e) { // 处理异常(如连接失败、认证失败等)或错误情况下的代码逻辑等)例如:记录日志、抛出运行时异常等)这里仅做演示用途,请根据实际情况进行调整。注意捕获并处理所有异常以确保程序的稳定性和安全性。在实际的生产环境中,您可能希望进行更详细的处理,例如记录日志、发送警报等。同时,不要忘记处理所有可能的异常情况。例如,您可以捕获 `IOException` 来处理网络连接或认证问题。  
            e.printStackTrace();  
        }  
    }  
}
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3天前
|
监控 安全 Java
Java与物联网:连接与控制设备
Java与物联网:连接与控制设备
30 0
|
3天前
|
监控 Java 物联网
Java串口通信技术探究1:深入理解RXTX库
Java串口通信技术探究1:深入理解RXTX库
32 2
|
3天前
|
网络安全 网络架构 数据安全/隐私保护
树莓派通过网线连接电脑(校园网也能连接),实现SSH连接
树莓派通过网线连接电脑(校园网也能连接),实现SSH连接
|
3天前
|
安全 Linux Shell
|
3天前
|
移动开发 Ubuntu 前端开发
用xshell5 ssh连接eve-ng时报错
用xshell5 ssh连接eve-ng时报错
12 2
|
3天前
|
前端开发 Java 应用服务中间件
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
17 0
|
3天前
|
SQL Java 关系型数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
|
3天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
11 0
|
3天前
|
SQL Java 数据库连接
Java数据库编程实践:连接与操作数据库
Java数据库编程实践:连接与操作数据库
12 0
|
3天前
|
数据采集 机器学习/深度学习 Java
数据猎手:使用Java和Apache HttpComponents库下载Facebook图像
本文介绍了如何使用Java和Apache HttpComponents库从Facebook获取图像数据。通过设置爬虫代理IP以避免限制,利用HttpClient发送请求,解析HTML找到图像链接,然后下载并保存图片。提供的Java代码示例展示了实现过程,包括创建代理配置、线程池,以及下载图片的逻辑。注意,实际应用需根据Facebook页面结构进行调整。
数据猎手:使用Java和Apache HttpComponents库下载Facebook图像