Выполните несколько команд последовательно с libssh2 - PullRequest
1 голос
/ 09 ноября 2019

Я ищу способ выполнить несколько команд последовательно. То, что я делаю сейчас, - это создание канала мяу для каждой команды и его закрытие. Если я использую только один канал, я получаю ошибку, что канал не может быть повторно использован. Но я не уверен, что это правильный путь, потому что открытие канала для каждой команды звучит дорого.

Я хочу создать ssh-соединение с устройством OpenWrt, которое содержит исполняемый файл 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 (неправильное использование).

...