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