java 领域中, 开源jar 包ganymed-ssh2 对ssh2协议进行了实现, 通过ganymed-ssh2 可实现Linux命令: ssh 和 scp 的功能. ganymed-ssh2 提供了多种认证方式, 可通过用户名密码, 秘钥等方式. 笔者常用的是用户名密码方式。 ganymed-ssh2 的开发步骤:
- 使用主机地址创建连接对象new Connection(host)
- 创建TCP连接, connection.connect()
- 进行身份认证,笔者使用的是用户名密码方式: connection.authenticateWithPassword(username, password)
- 创建会话,每次远程操作都需要重新打开一个会话. connection.openSession()
- 执行ssh 操作或scp 操作
- 关闭连接: connection.close()
1. 引入maven 依赖
笔者习惯于使用maven 开发, 所以新建maven 项目, 然后引入依赖. 需要注意的是笔者使用的是build210 版本, 是buildxxx系列的最高版本. 不同版本的api 还是有差别的.
<dependencies>
<!-- 引入ssh2 依赖 -->
<dependency>
<groupId>ch.ethz.ganymed</groupId>
<artifactId>ganymed-ssh2</artifactId>
<version>build210</version>
</dependency>
<!-- 引入单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
2. 开发工具类
2.1 自定义SSH2 工具类
笔者觉得ganymed-ssh2 提供的API 并不符合笔者的开发习惯,所以进行了二次封装。 将常用的ssh2 操作封装成了一个工具类。
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.SCPClient;
import ch.ethz.ssh2.Session;
import java.io.*;
/**
* @Description: ssh2 工具类
* @author: zongf
* @date: 2019-03-25 20:23
*/
public class SSH2Util {
private static String DEFAULT_CHARSET = "UTF-8";
/**
* @Description: 建立ssh2连接
* @param host 主机地址
* @param username 用户名
* @param password 密码
* @return: Connection
* @author: zongf
* @time: 2019-03-25 20:46:32
*/
public static Connection openConnection(String host, String username, String password) {
Connection connection;
try {
connection = new Connection(host);
// 建立ssh2 连接
connection.connect();
// 校验用户名密码
boolean login = connection.authenticateWithPassword(username, password);
// 登录成功返回连接
if (login) {
return connection;
}else {
throw new RuntimeException("用户名密码不正确");