# ohos_ssh **Repository Path**: damonjiang/ohos_ssh ## Basic Information - **Project Name**: ohos_ssh - **Description**: No description available - **Primary Language**: Unknown - **License**: LGPL-2.1 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-12-22 - **Last Updated**: 2025-12-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ohos_ssh ## 介绍 基于 libssh-0.11.1 C++库封装的一个支持SFTP服务端以及SSH客户端的鸿蒙三方库。 ## 下载安装 ```shell ohpm install @ohos/libssh ``` - OpenHarmony ohpm环境配置等更多内容,请参考 [如何安装OpenHarmony ohpm包](https://gitcode.com/openharmony-tpc/docs/blob/master/OpenHarmony_har_usage.md) 。 ### 编译运行 本项目依赖libssh库,编译产物.so文件和头文件通过`git submodule`引入,下载代码时需加上`--recursive`参数。 ``` git clone --recursive https://gitee.com/openharmony-tpc-incubate/ohos_ssh.git ``` 如果想要在本地编译libssh,参考[libssh本地编译脚本](https://gitee.com/han_jin_fei/lycium/tree/master/main/libssh)。 在cpp目录下新增thirdparty目录,并将编译生成的库拷贝到该目录下,如下图所示: ![image-20250611153322646](./dir.png) ## 使用说明 ### 生成公私钥 ```typescript import { libssh, SSH_KEYTYPES } from '@ohos/libssh'; ...... this.ssh2Napi = new libssh(); let result = this.ssh2Napi.keygen(this.privateKeyPath, this.publicKeyPath, SSH_KEYTYPES.SSH_KEYTYPE_ECDSA); ...... ``` ### 设置用户信息 ```typescript import { libssh, SSH_KEYTYPES } from '@ohos/libssh'; ...... this.ssh2Napi = new libssh(); let result = this.ssh2Napi.setUser(this.username, this.password); ...... ``` ### 设置算法相关 ```typescript import { libssh, SSH_KEYTYPES } from '@ohos/libssh'; ...... this.ssh2Napi = new libssh(); let result = this.ssh2Napi.setSFTPKeyexChangeCer("curve25519-sha256") result = this.ssh2Napi.setSFTPServerCer("aes256-ctr,aes128-ctr,aes192-ctr") result = this.ssh2Napi.setSFTPMessageCer("hmac-sha2-512,hmac-sha2-265") ...... ``` ### 启动SFTP服务端 ```typescript import { libssh, SSH_KEYTYPES } from '@ohos/libssh'; ...... let callback = (type: number) => { if (type == 2) { console.log("sftp启动成功") } else if (type == 3) { console.log("sftp启动失败") } else if (type == 4) { console.log("sftp客户端连接服务成功") } else if (type == 5) { console.log("停止sftp服务成功、断开连接") } } this.ssh2Napi.setUser(this.username, this.password); //若在sftp服务端设置多个用户请执行多次setUser // this.ssh2Napi.setUser("test", "test123"); this.ssh2Napi.startSFTPServer(this.privateKeyPath, this.publicKeyPath, this.port, callback); ...... ``` ### 停止SFTP服务端 ```typescript import { libssh, SSH_KEYTYPES } from '@ohos/libssh'; ...... this.ssh2Napi = new libssh(); //注意停止sftp服务是异步的在startSFTPServer接口回调type=5即停止成功 let result = this.ssh2Napi.stopSFTPServer(); ...... ``` ### 启动SSH客户端 ```typescript import { libssh, SSH_KEYTYPES } from '@ohos/libssh'; ...... this.ssh2Napi = new libssh(); let callback = (type: number) => { if (type == 0) { console.log("sshClient启动成功") } else { console.log("sshClient启动失败,请先setUser或检查sshServer服务是否正常ping通") } } this.ssh2Napi.startSSHClient(this.sshServerIP, this.port, this.privateKeyPath, callback); ...... ``` ### 停止SSH客户端 ```typescript import { libssh, SSH_KEYTYPES } from '@ohos/libssh'; ...... this.ssh2Napi = new libssh(); let result = this.ssh2Napi.stopSSHClient(); ...... ``` ### 创建SSH客户端伪终端 ```typescript import { libssh, SSH_KEYTYPES } from '@ohos/libssh'; ...... this.ssh2Napi = new libssh(); let result = this.ssh2Napi.createShell() ...... ``` ### 在SSH客户端上下发指令 ```typescript import { libssh, SSH_KEYTYPES } from '@ohos/libssh'; ...... this.ssh2Napi = new libssh(); this.ssh2Napi.executeSSHComm(this.command).then((result) => { console.log("executeSSHComm result: " + result) }); ...... ``` ### 获取公钥指纹信息 ```typescript import { libssh, SSH_KEYTYPES } from '@ohos/libssh'; ...... this.ssh2Napi = new libssh(); let result = await this.ssh2Napi.getPublicKeyFingerprint(this.publicKeyPath); ...... ``` ## 接口说明 | 接口 | 参数 | 参数说明 | 返回值 | 接口说明 | | ----------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | :----------------------------- | --------------------------- | | keygen | privateKeyPath:string, publicKeyPath::string, type:SSH_KEYTYPES | 参数1:私钥生成路径;
参数2:公钥生成路径;
参数3:秘钥生成算法 | number 类型:0:成功;1失败 | 生成公钥私钥 | | setUser | name:string,psw:string | 参数1:用户名
参数2:用户密码 | number 类型:0:成功;1失败 | 设置用户信息 | | setSFTPKeyexChangeCer | cer:string | c参数1:支持的秘钥算法集,中间用逗号隔开 | number 类型:0:成功;1失败 | 设置秘钥交换支持的算法 | | setSFTPServerCer | cer:string | 参数1:支持的加密算法集,中间用逗号隔开 | number 类型:0:成功;1失败 | 设置SFTP服务端支持的加密算法 | | setSFTPMessageCer | cer:string | 参数1:支持的消息认证算法集,中间用逗号隔开 | number 类型:0:成功;1失败 | 设置消息认证支持的算法 | | startSFTPServer | privateKeyPath: string, publicKeyPath: string, port: number,callback:Function | 参数1:私钥存放的路径
参数2:公钥存放的路径
参数3:端口号
参数4:callback回调 | callback回调: let callback = (type: number) => {
if (type == 2) {
console.log("sftp启动成功")
} else if (type == 3) {
console.log("sftp启动失败")
} else if (type == 4) {
console.log("sftp客户端连接服务成功")
} else if (type == 5) {
console.log("停止sftp服务成功、断开连接")
}
} | 启动sftp服务器 | | startSSHClient | ip: string, port: number, privateKeyPath: string,callback:Function | 参数1:SSH服务端地址ip
参数2:端口号
参数3:私钥存放的路径
参数4:callback回调 | callback回调:
let callback = (type: number) => {
if (type == 0) {
console.log("sshClient启动成功")
} else {
console.log("sshClient启动失败,请先setUser或检查sshServer服务是否正常ping通")
}
} | 启动ssh客户端 | | executeSSHComm | command:string | 参数1:具体指令 | Promise | ssh客户端下发指令 | | stopSFTPServer | 无 | 无 | number 类型:0:成功;1失败 | 停止sftp服务 | | stopSSHClient | 无 | 无 | number 类型:0:成功;1失败 | 停止ssh客户端 | | getPublicKeyFingerprint | publicKeyPath: string | 参数1:公钥路径 | Promise | 获取公钥指纹 | ## 注意事项 - 无论是SFTP服务端还是SSH客户端,前后端的公私钥要对齐。 - 公私钥生成的规则以及各种算法要对齐。 ## 关于混淆 - 代码混淆,请查看[代码混淆简介](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/arkts-utils/source-obfuscation.md)。 - 如果希望libssh库在代码混淆过程中不会被混淆,需要在混淆规则配置文件obfuscation-rules.txt中添加相应的排除规则: ``` -keep ./oh_modules/@ohos/libssh ``` ## 约束与限制 在下述版本验证通过: DevEco Studio: DevEco Studio 5.0.3 Beta2- 5.0.9.200, SDK: API12。 ## 目录结构 ```` |----ohos_ssh | |---- entry # 示例代码文件夹 | |---- library | |---- cpp # c/c++和napi代码 | |---- napi # ssh的napi逻辑代码 | |---- CMakeLists.txt # 构建脚本 | |---- thirdparty # 三方依赖 | |---- types # 接口声明 | |---- utils # 工具类 | |---- index.ets # 对外接口 | |---- README.md # 安装使用方法 | |---- README_zh.md # 安装使用方法 ```` ## 贡献代码 使用过程中发现任何问题都可以提 [Issue](https://gitee.com/openharmony-tpc-incubate/ohos_ssh/issues) 给我们,当然,我们也非常欢迎你给我们发 [PR](https://gitee.com/openharmony-tpc-incubate/ohos_ssh//pulls) 。 ## 开源协议 本项目基于 [GNU - v 2.1](https://gitee.com/openharmony-tpc-incubate/ohos_ssh/LICENSE) ,请自由地享受和参与开源。