Jsch上传本地目录文件到服务器

摘要: 在一些框架开发工作中,需要为项目使用说明文档,来指导用户如何正确使用框架。比如通过markdown编写文档,同时将文档及图片等静态资源发布到nginx服务器。往往采用编译时候结合cicd脚本一起构建,推送服务器,但无法满足日常研发实时发布需要,本文介绍通过Jsch复制本地文件目录,到资源服务器得方法。

关键词: jsch;目录上传

1.Jsch简介

1.1 什么是Jsch

Jsch 是 Java Secure Channel 的缩写,是一个纯 Java 实现的 SSH2 协议客户端库。它允许在 Java 应用程序中建立与 SSH 服务器的安全连接,并进行文件传输、远程命令执行等操作.
以下是一些Jsch的主要特点和技术应用:

  1. SSH 连接:JSch 支持通过多种身份验证方法(如密码认证、公钥认证等)建立到 SSH 服务器的安全连接。
  2. 文件传输:JSch 实现了 SCP(Secure Copy)和 SFTP(SSH File Transfer Protocol)协议,允许在本地计算机和远程服务器之间进行文件的上传、下载和管理。
  3. 远程命令执行:JSch 允许在远程服务器上执行命令,可以通过打开远程 Shell 会话来执行命令并获取输出或处理错误。
  4. 端口转发:JSch 支持端口转发功能,可以将本地端口与远程端口关联,用于安全通信和访问受限资源。

1.2 Jsch使用步骤和简单示例

使用Jsch进行SSH连接和执行远程命令的一般步骤如下:

  1. 导入Jsch库: 首先需要将Jsch库添加到Java项目的依赖中。
  2. 创建Session对象: 使用Jsch库创建一个Session对象,该对象表示与远程服务器的会话。需要指定远程服务器的主机名、用户名和密码或者SSH密钥等认证信息。
  3. 连接到远程服务器: 调用Session对象的connect方法来连接到远程服务器。
  4. 创建Channel对象: 使用Session对象创建一个Channel对象,该对象表示与远程服务器的通信通道,可以是执行远程命令的Shell通道或者用于文件传输的SFTP通道等。
  5. 打开Channel: 调用Channel对象的open方法来打开通道。
  6. 执行操作: 根据需要执行相应的操作,例如执行远程命令、上传或下载文件等。
  7. 关闭通道和会话: 操作完成后,需要关闭Channel和Session对象,释放资源

下面是一个简单的示例代码,演示了如何使用Jsch连接到远程服务器并执行一个简单的命令:

import com.jcraft.jsch.*;

public class SSHExample {
   
   
    public static void main(String[] args) {
   
   
        String host = "remote_host";
        String user = "username";
        String password = "password";
        String command = "ls -l";

        try {
   
   
            // 创建JSch对象
            JSch jsch = new JSch();
            
            // 创建Session对象
            Session session = jsch.getSession(user, host, 22);
            
            // 设置密码
            session.setPassword(password);
            
            // 取消默认的HostKey检查
            session.setConfig("StrictHostKeyChecking", "no");
            
            // 连接到远程服务器
            session.connect();
            
            // 打开通道
            Channel channel = session.openChannel("exec");
            
            // 设置命令
            ((ChannelExec) channel).setCommand(command);
            
            // 获取输入流
            channel.setInputStream(null);
            
            // 获取输出流
            ((ChannelExec) channel).setErrStream(System.err);
            
            // 连接通道
            channel.connect();
            
            // 读取命令输出
            InputStream in = channel.getInputStream();
            byte[] buffer = new byte[1024];
            while (true) {
   
   
                while (in.available() > 0) {
   
   
                    int bytesRead = in.read(buffer, 0, 1024);
                    if (bytesRead < 0) break;
                    System.out.print(new String(buffer, 0, bytesRead));
                }
                if (channel.isClosed()) {
   
   
                    if (in.available() > 0) continue;
                    System.out.println("Exit Status: " + channel.getExitStatus());
                    break;
                }
                try {
   
   
                    Thread.sleep(1000);
                } catch (Exception ee) {
   
   
                }
            }
            
            // 关闭通道和会话
            channel.disconnect();
            session.disconnect();
        } catch (JSchException | IOException e) {
   
   
            e.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值