Skip to content

shaqian/react-native-ssh-sftp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

react-native-ssh-sftp

SSH and SFTP client library for React Native.

Installation

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

iOS (only)

NMSSH is required for iOS.

  1. Initialize Pod:
    cd ios
    pod init
    
  2. Open Podfile and add:
    target '[your project's name]' do
    	pod 'NMSSH', '2.2.8'
    end
    
  3. Install Pod:
    pod install
    

Manual Link

iOS

  1. In XCode, in the project navigator, right click Libraries âžś Add Files to [your project's name]
  2. Go to node_modules âžś react-native-ssh-sftp and add RNSSHClient.xcodeproj
  3. In XCode, in the project navigator, select your project. Add libRNSSHClient.a to your project's Build Phases âžś Link Binary With Libraries

Android

  1. Open up android/app/src/main/java/[...]/MainActivity.java - Add import com.reactlibrary.RNSshClientPackage; to the imports at the top of the file - Add new RNSshClientPackage() to the list returned by the getPackages() method
  2. Append the following lines to 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')
    
  3. Insert the following lines inside the dependencies block in android/app/build.gradle:
    compile project(':react-native-ssh-sftp')
    

Demo

example

  • This library is also used in iOS app PiHelper.




Run demo

iOS

cd example
cd ios
pod install
cd ..
npm install
react-native run-ios

Android

cd example
npm install
react-native run-android

Usage

Create a client using password authentication

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

let client = new SSHClient('10.0.0.10', 22, 'user', 'password', (error) => {
  if (error)
    console.warn(error);
});

Create a client using public key authentication

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);
});
  • Public key authentication also supports:
{privateKey: '-----BEGIN RSA......'}
{privateKey: '-----BEGIN RSA......', publicKey: 'ssh-rsa AAAAB3NzaC1yc2EA......'}
{privateKey: '-----BEGIN RSA......', publicKey: 'ssh-rsa AAAAB3NzaC1yc2EA......', passphrase: 'Password'}

Close client

client.disconnect();

Execute SSH command

var command = 'ls -l';
client.execute(command, (error, output) => {
  if (error)
    console.warn(error);
  if (output)
    console.warn(output);
});

Shell

Start shell:

  • Supported ptyType: vanilla, vt100, vt102, vt220, ansi, xterm
var ptyType = 'vanilla';
client.startShell(ptyType, (error) => {
  if (error)
    console.warn(error);
});

Read from shell:

client.on('Shell', (event) => {
  if (event)
    console.warn(event);
});

Write to shell:

var str = 'ls -l\n';
client.writeToShell(str, (error) => {
  if (error) 
    console.warn(error);
});

Close shell:

client.closeShell();

SFTP

Connect SFTP

client.connectSFTP((error) => {
  if (error)
    console.warn(error);
});

List directory:

var path = '.';
client.sftpLs(path, (error, response) => {
  if (error)
    console.warn(error);
  if (response)
    console.warn(response);
});

Create directory:

client.sftpMkdir('dirName', (error) => {
  if (error)
    console.warn(error);
});

Rename file or directory:

client.sftpRename('oldName', 'newName', (error) => {
  if (error)
    console.warn(error);
});

Remove directory:

client.sftpRmdir('dirName', (error) => {
  if (error)
    console.warn(error);
});

Remove file:

client.sftpRm('fileName', (error) => {
  if (error)
    console.warn(error);
});

Download file:

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

// Downlowd progress
client.on('DownloadProgress', (event) => {
  console.warn(event);
});

// Cancel download:
client.sftpCancelDownload();

Upload file:

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

// Upload progress
client.on('UploadProgress', (event) => {
  console.warn(event);
});

// Cancel upload:
client.sftpCancelUpload();

Close SFTP:

client.disconnectSFTP();

Credits

  • iOS SSH library: NMSSH
  • Android SSH library: JSch