热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

nativereactssh_ReactNativeSSHSFTP组件

分享一下最近写的ReactNative的SSHSFTP组件,iOS端封装了NMSSH,Android端封装了JSch。支持SSH执行命令、实时Shell

分享一下最近写的 React Native 的 SSH / SFTP 组件,iOS 端封装了 NMSSH,Android 端封装了 JSch。支持 SSH 执行命令、实时 Shell 和基本的 SFTP 操作,同时支持密码或密钥验证。

安装

npm install react-native-ssh-sftp --save

react-native link react-native-ssh-sftp

iOS (only)

NMSSH 需要用 Pod 安装,如果已经有 Pod 可以直接 pod 'NMSSH'。没有的话按以下步骤初始化后安装:

初始化 Pod 文件:

cd ios

pod init

打开 Podfile 添加:

target '[your project's name]' do

pod 'NMSSH'

end

安装:

pod install

手动 Link

react-native link 不好使的情况试一下手动添加:

iOS

打开 XCode 的 project navigator,右击 Libraries ➜ Add Files to [项目名称]

找到 node_modules ➜ react-native-ssh-sftp 然后选择 RNSSHClient.xcodeproj

打开 XCode 的 project navigator,选中你的项目,添加 libRNSSHClient.a 到项目的 Build Phases ➜ Link Binary With Libraries

Android

打开 android/app/src/main/java/[...]/MainActivity.java

- 添加 import com.reactlibrary.RNSshClientPackage; 到文件开头的 imports 中

- 添加 new RNSshClientPackage() 到 getPackages() 方法的列表中

在 android/settings.gradle 中添加以下内容 :

include ':react-native-ssh-sftp'

project(':react-native-ssh-sftp').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-ssh-sftp/android')

在 android/app/build.gradle 文件的 dependencies 中添加:

compile project(':react-native-ssh-sftp')

演示

example

我的 App 树莓派助手 也在使用这个组件

运行演示项目

iOS

cd example

cd ios

pod install

cd ..

npm install

react-native run-ios

Android

cd example

npm install

react-native run-android

使用方法介绍

创建 client 并使用密码验证

import SSHClient from 'react-native-ssh-sftp';

let client = new SSHClient('10.0.0.10', 22, 'user', 'password', (error) => {

if (error)

console.warn(error);

});

创建 client 并使用密钥验证

import SSHClient from 'react-native-ssh-sftp';

let client = new SSHClient('10.0.0.10', 22, 'user', {privateKey: '-----BEGIN RSA......'}, (error) => {

if (error)

console.warn(error);

});

密钥验证的其他格式:

{privateKey: '-----BEGIN RSA......'}

{privateKey: '-----BEGIN RSA......', publicKey: 'ssh-rsa AAAAB3NzaC1yc2EA......'}

{privateKey: '-----BEGIN RSA......', publicKey: 'ssh-rsa AAAAB3NzaC1yc2EA......', passphrase: 'Password'}

关闭 client

client.disconnect();

执行 SSH 命令

var command = 'ls -l';

client.execute(command, (error, output) => {

if (error)

console.warn(error);

if (output)

console.warn(output);

});

Shell

开启 shell:

ptyType 的可选类型: vanilla, vt100, vt102, vt220, ansi, xterm

var ptyType = 'vanilla';

client.startShell(ptyType, (error) => {

if (error)

console.warn(error);

});

从 shell 获取数据:

client.on('Shell', (event) => {

if (event)

console.warn(event);

});

向 shell 写数据:

var str = 'ls -l\n';

client.writeToShell(str, (error) => {

if (error)

console.warn(error);

});

关闭 shell:

client.closeShell();

SFTP

连接 SFTP

client.connectSFTP((error) => {

if (error)

console.warn(error);

});

获取目录列表:

var path = '.';

client.sftpLs(path, (error, response) => {

if (error)

console.warn(error);

if (response)

console.warn(response);

});

创建目录:

client.sftpMkdir('dirName', (error) => {

if (error)

console.warn(error);

});

重命名文件或目录:

client.sftpRename('oldName', 'newName', (error) => {

if (error)

console.warn(error);

});

删除目录:

client.sftpRmdir('dirName', (error) => {

if (error)

console.warn(error);

});

删除文件:

client.sftpRm('fileName', (error) => {

if (error)

console.warn(error);

});

下载文件:

client.sftpDownload('[path-to-remote-file]', '[path-to-local-direcotry]', (error, downloadedFilePath) => {

if (error)

console.warn(error);

if (downloadedFilePath)

console.warn(downloadedFilePath);

});

// 获取下载进度

client.on('DownloadProgress', (event) => {

console.warn(event);

});

// 取消下载

client.sftpCancelDownload();

上传文件:

client.sftpUpload('[path-to-local-file]', '[path-to-remote-directory]', (error) => {

if (error)

console.warn(error);

});

// 获取上传进度

client.on('UploadProgress', (event) => {

console.warn(event);

});

// 取消上传

client.sftpCancelUpload();

断开 SFTP:

client.disconnectSFTP();



推荐阅读
  • 修复前面版本的一些问题在前面2-5分支中,运行后控制台总会出现一些错误。原因就是client目录下app.js和App.jsx的文件名相似引起的。因此我们将app.js重新命名为m ... [详细]
  • mac用于开发使用时间长硬盘会越来越小,速度越来越慢的,亦是花了几分钟研究怎么清理系统的缓存,方法:1,到https:www.omnigroup.commore安装OmniDisk ... [详细]
  • OpenGL01 Mac 系统 OpenGL 环境配置
    直入主题(此环境配置在Mac下):1、xcode新创建MacOS工程,如下图2、添加 OpenGl.framework GLUT.framework两个系统库3、添加两个工具文件C ... [详细]
  • Win7操作系统建立无线虚拟wifi
    网络适配器中的microsoftvirtualwifiminiportadapter是windows7的隐藏功能,虚拟wifi。正确的运用这个功能,就可以把电脑当做路由器了。注 ... [详细]
  • Centos 使用yum安装MongoDB 4.2
    1.配置MongoDB的yum源创建yum源文件:#cdetcyum.repos.d#vimmongodb-org-4.0.repo添加以下内容:(我们这里使用阿里云的源)[mng ... [详细]
  • Java IO流学习总结(2)
    写在前面:本文章基本覆盖了javaIO的全部内容,java新IO没有涉及,因为我想和这个分开,以突出那个的重要性,新IO哪一篇文章还没有开始写,估计很快就能和大家见面。照旧,文章依 ... [详细]
  • 在现有的应用开发过程中经常会有拍照或者录制视频的需求,关于普通的调用系统相机进行拍摄网上的总结已经很全面了,而当我们需要自定义拍照界面使用surface ... [详细]
  • 前期部署1.JDK安装,配置PATH2.下载spark-1.6.1-bin-hadoop2.6.tgz,并上传到服务器解压3.在 usr 下创建软链接到目标文件夹4.修改配置文件, ... [详细]
  • Mac安装Appium
    Appium官网http:appium.io实际步骤1.appium基于node.js首先安装node.jsbrewinstallnode2.安装appiumnpminstal ... [详细]
  • react的导出是怎么实现的_22 个让 React 开发更高效更有趣的工具
    英文|https:dev.tojsmanifest22-miraculous-tools-for-react-developers-in-2019-4i46翻译|https:www ... [详细]
  • 状压dfs。。。。GemsFight!TimeLimit:2000010000MS(JavaOthers)    MemoryLimit:327680327680K ... [详细]
  • 一招解决 Github 加载慢问题
    前言GitHubBuildsoftwarebetter,together.Github是开发者提高生产力的必备工具,是程序员心目中永远的神。但是Github在国 ... [详细]
  • react组件的分类大全,以及受控组件和非受控组件
    组件的分类方式有哪些?1.分是否有状态:有状态组件,无状态组件2.按定义方式不同:函数组件(构造函数组件),类组件(class组件)3.按默认是否受state控制:受控组件,非受控 ... [详细]
  • 滴滴官网首页3d地球动画反译实现
    最近有个页面的效果需求,要实现一个3D地球的动画效果,在寻找效果参考时看到didiGlobel官网的效果很好,所以就想把这个 ... [详细]
  • 背景使用yarncreateumi创建了一个干净的基于umidva的react项目。在遇到组件之间的通讯时,需要使用到dva。如何使用dva实现组件之间的通讯呢&# ... [详细]
author-avatar
angel青彤雪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有