Flutter 的 SSH / SFTP 插件 - ssh

ssh

用于创建 SSH / SFTP 客户端的 Flutter 插件,iOS 端封装了 NMSSH,Android 端封装了 JSch。支持 SSH 执行命令、实时 Shell 和基本的 SFTP 操作,同时支持密码或密钥验证。

GitHub
Dart Pub

安装

在 pubspec.yaml 文件中添加 ssh 依赖:

dependencies:
  ssh: ^0.0.2

用法

创建 client 并使用密码验证

import 'package:ssh/ssh.dart';

var client = new SSHClient(
  host: "my.sshtest",
  port: 22,
  username: "sha",
  passwordOrKey: "Password01.",
);

创建 client 并使用密钥验证

import 'package:ssh/ssh.dart';

var client = new SSHClient(
  host: "my.sshtest",
  port: 22,
  username: "sha",
  passwordOrKey: {
    "privateKey": """-----BEGIN RSA PRIVATE KEY-----
    ......
-----END RSA PRIVATE KEY-----""",
  },
);

连接 client

await client.connect();

关闭 client

await client.disconnect();

执行 SSH 命令

var result = await client.execute("ps");

Shell

连接 shell:

  • ptyType 的可选类型: vanilla, vt100, vt102, vt220, ansi, xterm
var result = await client.startShell(
  ptyType: "xterm", // 默认为 vanilla
  callback: (dynamic res) {
    print(res);     // 从 shell 读数据
  }
);

向 shell 写数据:

await client.writeToShell("ls\n");

关闭 shell:

await client.closeShell();

SFTP

连接 SFTP

await client.connectSFTP();

获取目录列表:

var array = await client.sftpLs("/home"); // 默认路径为“.”

创建目录:

await client.sftpMkdir("testdir");

重命名文件或目录:

await client.sftpRename(
  oldPath: "testfile",
  newPath: "newtestfile",
);

删除目录:

await client.sftpRmdir("testdir");

删除文件:

await client.sftpRm("testfile");

下载文件:

var filePath = await client.sftpDownload(
  path: "testfile",
  toPath: tempPath,
  callback: (progress) {
    print(progress); // 获取下载进度
  },
);

// 取消下载:
await client.sftpCancelDownload();

上传文件:

await client.sftpUpload(
  path: filePath,
  toPath: ".",
  callback: (progress) {
    print(progress); // 获取上传进度
  },
);

// 取消上传
await client.sftpCancelUpload();

断开 SFTP:

await client.disconnectSFTP();

示例程序

请参考 example

安装

flutter packages get

运行

flutter run
    原文作者:三少ZZzzz
    原文地址: https://www.jianshu.com/p/d29d13f4ddf3
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞