提问人:Th0rgal 提问时间:11/17/2023 更新时间:11/17/2023 访问量:13
在 Rust 和流响应中发送 SSH 命令
sending ssh commands in rust and stream response
问:
我正在尝试使用 rust 在通过 SSH 连接到的服务器上执行命令。我希望能够读取命令的结果(并在运行命令后将服务器上打印的每一行流式传输到客户端)。我尝试了从 ssh2 开始的多个库,不幸的是它不允许我流式传输响应。我听说过async_ssh2,特别是async_ssh2_lite。我在网上找不到很多例子,但我可以在我复制的人的旧分支中看到一个演示:
use crate::config::Config;
use std::io;
use std::net::SocketAddr;
use std::net::TcpStream;
use async_io::Async;
use async_ssh2_lite::AsyncSession;
use std::str::FromStr;
pub async fn execute_actions(config: Config, skip: Option<Vec<String>>) -> io::Result<()> {
let addr = SocketAddr::from_str(&config.server.host).expect("Invalid host address format");
let stream = Async::<TcpStream>::connect(addr).await?;
let mut session = AsyncSession::new(stream, None)?;
session.handshake().await?;
Ok(())
}
不幸的是,这似乎不起作用,因为我在以下方面出现错误:.handshake()
the method `handshake` exists for struct `AsyncSession<Async<TcpStream>>`, but its trait bounds were not satisfied
the following trait bounds were not satisfied:
`async_io::Async<std::net::TcpStream>: AsyncSessionStream`
我不确定如何解决这个问题,网上的人似乎认为这是因为缺少 async-io 功能,但添加它无济于事:
async-ssh2-lite = { version = "0.4.7", features = ["async-io", "tokio"] }
答: 暂无答案
下一个:如何从动态库调用异步函数
评论