sshj 示例

开发中常需对服务器进行操作,为方便开发需编写工具。博客给出使用sshj模拟ssh的过程,还提及了gradle配置,内容转载自相关博客。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sshj 示例

开发常常需要去服务器做一些操作,比如配置一下,或者取服务器的配置什么的,需要写点工具方便开发。

下面是一个使用sshj 模拟ssh的过程。

package sshStuff;

import net.schmizz.sshj.SSHClient;
import net.schmizz.sshj.common.IOUtils;
import net.schmizz.sshj.connection.channel.direct.Session;
import net.schmizz.sshj.connection.channel.direct.Session.Command;
import net.schmizz.sshj.transport.verification.PromiscuousVerifier;

public class Functor {

    public static void main(String[] args) throws Exception {
        String TMP = "http://10.59.60.231:31154";
        if(args.length >= 1){
            TMP = args[0];
        }
        String ret = connect(TMP);
        System.out.println(ret);
    }

    public static String connect(String url) throws Exception {
        SSHClient ssh = new SSHClient();
        ssh.addHostKeyVerifier(new PromiscuousVerifier());
        ssh.connect(getIp(url), getPort(url));
        ssh.authPassword("root", "123456");

        Session session = ssh.startSession();
        Command cmd = session.exec("cat /usr/local/tomcat/StartTomcat.sh");
        String ret = IOUtils.readFully(cmd.getInputStream()).toString();
        // System.out.println(ret);
        session.close();
        ssh.close();
        return ret;
    }

    private static String getIpPort(String url) {

        String[] slash = url.split("/");
        String ipport = null;
        if (url.toLowerCase().startsWith("http")) {
            ipport = slash[2];
        } else {
            ipport = slash[0];
        }
        return ipport;
    }

    private static String getIp(String url) {
        String ipport = getIpPort(url);
        return ipport.split(":")[0];
    }

    private static int getPort(String url) {
        String ipport = getIpPort(url);
        return Integer.parseInt(ipport.split(":")[1]) + 1;
    }

}

下面是gradle配置

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
   
    compile group: 'net.schmizz', name: 'sshj', version: '0.10.0'
}

// In this section you declare where to find the dependencies of your project
repositories {
    // Use jcenter for resolving your dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
}


jar {
    from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 
    manifest {
        attributes 'Main-Class': 'sshStuff.Functor'
    }
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA' 
}
posted on 2018-08-29 10:37  开学五年级了 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/qwsdcv/p/9552862.html

### 使用SSHJ库连接SFTP服务器 为了使用SSHJ库连接到SFTP服务器并执行操作,首先需要确保项目中包含了SSHJ依赖项。可以通过Maven配置文件`pom.xml`引入该依赖: ```xml <dependency> <groupId>net.schmizz</groupId> <artifactId>sshj</artifactId> <version>0.32.0</version> </dependency> ``` 建立与SFTP服务器的连接涉及创建一个`SSHClient`实例,并通过它来进行身份验证以及初始化SFTP会话。 下面是一个完整的例子,展示了如何利用SSHJ库完成这一过程[^1]: ```java import net.schmizz.sshj.SSHClient; import net.schmizz.sshj.connection.channel.direct.Session; import net.schmizz.sshj.sftp.RemoteFile; import net.schmizz.sshj.sftp.SFTPClient; public class SftpExample { public static void main(String[] args) throws Exception { try (final SSHClient ssh = new SSHClient()) { // 设置主机名或IP地址 String hostname = "your.server.hostname"; // 开始尝试连接至目标机器 ssh.connect(hostname); try { // 尝试基于用户名密码的身份验证方式 ssh.authPassword("username", "password"); // 获取新的SFTP客户端对象用于后续的操作 try (SFTPClient sftp = ssh.newSFTPClient()) { // 执行具体的命令比如上传下载文件等... // 列举远程目录下的所有条目作为测试动作之一 for (RemoteFile entry : sftp.ls("/remote/path")) { System.out.println(entry.getName()); } } finally { // 断开连接前关闭资源 ssh.disconnect(); } } catch (Exception e) { throw new RuntimeException(e.getMessage(), e.getCause()); } } } } ``` 这段代码片段说明了基本流程:先设置好要访问的目标服务器信息;接着调用`connect()`方法发起TCP级别的握手请求;成功之后再调用`authPassword()`函数提供合法凭证以获得授权许可;最后借助`sftp.ls()`列举指定路径下所有的文件夹和文件名称列表来检验是否能够正常工作[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值