ssh - 使用 libssh2 顺序执行多个命令
问题描述
我正在寻找一种顺序执行多个命令的方法。我现在要做的是为每个命令创建一个新频道并关闭它。如果我只使用一个频道,我会收到一个频道无法重复使用的错误。但我不确定这是否是正确的方法,因为为每个命令打开一个通道听起来代价高昂。
我要做的是创建一个到 OpenWrt 设备的 ssh 连接,该设备包含一个名为 uci 的可执行文件,它可以修改设备上的配置文件并像这样使用它:
uci set network.lan.ipaddr='192.168.1.2'
uci set network.lan.dns='192.168.1.1'
我的代码与此类似:
let tcp = TcpStream::connect("127.0.0.1:22").unwrap();
let mut sess = Session::new().unwrap();
sess.set_tcp_stream(tcp);
sess.handshake().unwrap();
sess.userauth_agent("username").unwrap();
let mut channel = sess.channel_session().unwrap();
channel.exec("ls").unwrap();
channel.wait_close();
println!("#1 exit: {}", channel.exit_status().unwrap());
let mut channel = sess.channel_session().unwrap();
channel.exec("ls").unwrap();
channel.wait_close();
println!("#2 exit: {}", channel.exit_status().unwrap());
如果我不关闭通道并按顺序执行 2 个命令,我会收到错误代码 -39(错误用法)。
解决方案
推荐阅读
- google-cloud-dataflow - Dataflow CDC 也可以用于初始转储吗?
- r - 如何计算R中矩阵列表的平均值
- java - Rest Assured execption class io.restassured.path.xml.XmlPath cannot be cast to class java.util.ArrayList error
- pytorch - 在推理期间增加批量大小
- statistics - 如何在给定几个参数的情况下确定样本量
- node.js - 使用 mongoose 从对象数组中软删除
- c# - .NET C#“根据验证程序,远程证书无效”
- amazon-web-services - Amazon EC2 上 PHPMailer 的 Beanstalkd/Pheanstalk
- sql - 如何在 Cloud Formation 模板中运行 SQL 查询以在 AWS RDS 中启用 Delayed_Durability
- javascript - 在 Cryptodome python 中解密 CyproJS AES 加密