首页 > 解决方案 > 使用 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(错误用法)。

标签: sshlibssh2

解决方案


推荐阅读