1个不稳定版本
0.1.0 | 2023年4月4日 |
---|
#45 在 #execute-command
52KB
687 行
SSHKit.rs
SSHKit.rs是一个Rust库,灵感来源于Ruby版本。SSHKit.rs提供了一个易于使用的接口,用于通过SSH与远程服务器交互。它旨在简化常见的SSH操作,如执行命令、上传和下载文件以及管理对远程主机的连接。
该库旨在简单且强大,提供了一个高级接口以执行复杂任务,同时对于初学者来说仍然易于使用。它建立在流行的SSH2库之上,该库为安全的可靠SSH通信提供了坚实的基础。
使用SSHKit.rs的一个主要优点是其异步设计,这允许同时管理多个连接,从而大大提高了性能和可扩展性。此外,它提供了一个灵活且可扩展的架构,可以轻松定制以适应特定的用例或需求。
总的来说,SSHKit.rs是开发人员执行SSH远程操作的有价值工具,无论用于自动化部署、配置管理还是其他用例。
示例
以下是您可以使用SSHKit.rs的一些示例
在所有主机上执行简单命令
let sshkit = SshKit::new();
let server = Host::new("127.0.0.1", "killix", None).with_password("password");
let cmd = CommandBuilder::new("ls -la");
let exec_mode = ExecMode::Sequential(Some(Duration::from_secs(5)));
let results = sshkit.on(server.clone()).execute(cmd, exec_mode).await?;
for result in results {
for (host, output) in result {
println!("Output from {}: {:?}", host.address, output);
}
}
在所有主机上执行多个命令,同时设置多个环境变量
let cmd = CommandBuilder::new("printenv")
.add_command("ls -la /etc")
在所有主机上执行命令,同时设置多个环境变量
let cmd = CommandBuilder::new("printenv")
.with_env("VAR1", "value1")
.with_env("VAR2", "value2");
在特定目录中的所有主机上执行命令
let cmd = CommandBuilder::new("printenv")
.with_in("/remote/path")
使用sudo并根据给定的用户和组提升权限,在所有主机上执行命令
let cmd = CommandBuilder::new("printenv")
.as_user("admin")
将文件或目录上传到所有主机
let sshkit = SshKit::new();
let server = Host::new("127.0.0.1", "killix", None).with_password("password");
let file_opts = FileOptions::new("/path/to/remote/file").with_local_path("/path/to/local/file", );
ssh_kit
.on(server)
.upload(file_opts);
从所有主机下载文件或目录
let sshkit = SshKit::new();
let server = Host::new("127.0.0.1", "killix", None).with_password("password");
let file_opts = FileOptions::new("/path/to/remote/file").with_local_path("/path/to/local/file", );
ssh_kit
.on(server)
.download(file_opts);
测试所有主机上文件或目录的存在性
let sshkit = SshKit::new();
let server = Host::new("127.0.0.1", "killix", None).with_password("password");
let cmd = CommandBuilder::new("node -v");
let exec_mode = ExecMode::Sequential(None);
let results = sshkit.on(server.clone()).test(cmd, exec_mode).await?;
for result in results {
for (host, output) in result {
println!("Output from {}: {:?}", host.address, output);
}
}
执行模式
The ExecMode枚举定义了在多个主机上运行命令的不同执行模式。它有三个变体
- 顺序:依次在每台主机上运行命令。它包含一个可选的持续时间参数,该参数指定在超时之前等待命令完成的最大时间。
- 并行:在所有主机上并行运行命令。
- 分组:将主机分成组,并在每个组中并行运行命令。它包含一个usize参数,指定每组中的主机数量,以及一个可选的持续时间参数,该参数指定在超时之前等待命令完成的最大时间。
连接池
SSHKit.rs使用简单的连接池来减少协商新SSH连接的开销。默认情况下,如果一个连接超过30秒未被使用,它将被新的连接替换。这个超时时间可以针对每个服务器进行自定义。
贡献
欢迎并向SSHKit.rs做出贡献!要贡献,请按照以下步骤操作
- 在GitHub上 Fork 仓库。
- 为您的更改创建一个新的分支。
- 对您的更改进行修改,并将其提交到您的分支。
- 创建一个拉取请求,将您的更改合并到主分支。
在提交拉取请求之前,请确保您的代码遵循Rust编码标准,并且所有测试都通过。另外,如果您正在引入新功能,请相应地更新文档和示例。
我们期待与您在这个项目上进行合作!
许可协议
SSHKit.rs在MIT许可协议下发布。
依赖项
~7–15MB
~166K SLoC