[ssh-client] 一个支持以直连/跳机方式连接远程主机的组件

SSH-Client

通过 SSH-Client 可以直连/跳机方式连接到远程主机执行命令、传输文件。

快速上手

引入依赖:

<dependency>
    <groupId>com.github.LinYuanBaoBao</groupId>
    <artifactId>ssh-client</artifactId>
    <version>1.0.0-RELEASE</version>
</dependency>
复制代码

建立/断开 ssh 连接

// 配置跳机
SSHClient.JumpHost jumpHost = new SSHClient.JumpHost();
jumpHost.setHost("127.122.188.117")
        .setPassword("abcd1234")
        .setPort(22)
        .setUsername("root");

SSHClient ssh = SSHClient.builder()
        .setHost("10.50.3.3")
        .setPassword("abcd1234")
        .setJumpHost(jumpHost)
        .setPort(22)
        .setUsername("root")
        .build();
ssh.setExecTimeout(3000);        // 设置执行命令超时时间
ssh.connect(10 * 1000);          // 连接远程主机,并设置连接超时时间
ssh.openSftpChannel(10 * 1000);  // 开启 sftp,并设置传输文件超时时间
复制代码

执行命令

基本使用

List<String> output = ssh.exec("echo hello");
System.out.print(output);
// or
ssh.exec("echo hello", System.out::println);
复制代码

执行超时

try {
    ssh.exec("while true;do ls;sleep 1s; done;", System.out::println);
} catch (SSHClientException e) {
    e.printStackTrace();
}
复制代码

错误退出码

try {
    ssh.exec("ls aaaaaaaaaaaaaaaa");
} catch (UnexpectedExitStatusException e) {
    System.out.println("exitStatus:"+e.getExitStatus());
    System.out.println("errMsg:"+e.getOut());
}
复制代码

创建文件夹

ssh.mkdirs("/tmp/scp/sub1/sub2");
复制代码

传输文件

File sourceDir = new File(getClass().getResource("/assert/scp/file").getFile());
ssh.scp(sourceDir, "/tmp/scp/sub1/sub2");
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。