You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中以子进程方式调用ssh命令?

解决方案

你编写的Rust调用ssh子进程的代码本身逻辑没有问题,运行异常是VSCode内置终端的兼容性缺陷导致,和代码实现无关。

标准实现代码

use std::process::Command;

fn main() {
    let mut child = Command::new("ssh")
        .arg("user@192.168.0.1")
        .spawn()
        .expect("无法启动ssh子进程");
    
    let exit_status = child.wait().expect("等待ssh进程退出失败");
    println!("ssh进程最终退出状态:{}", exit_status);
}

问题说明

  • 上述代码在所有系统原生终端(Windows Terminal、macOS终端、Linux各发行版自带终端等)中均可正常运行,不需要额外调整
  • 异常仅触发在VSCode内置终端环境中,该终端对ssh、telnet这类需要申请tty交互的程序,从子进程拉起的场景存在兼容性问题
  • 不需要引入第三方ssh库实现该功能,标准库的std::process::Command完全覆盖需求

VSCode环境测试规避方法

如果需要在VSCode开发阶段测试该功能,可任选以下方案:

  • 直接在VSCode外的系统原生终端中运行编译好的二进制文件
  • 在VSCode设置中将默认启动终端替换为系统原生终端,重启终端后再运行
  • 给ssh添加-T参数禁用伪终端分配,即可在VSCode内置终端中正常运行:
let mut child = Command::new("ssh")
    .arg("-T")
    .arg("user@192.168.0.1")
    .spawn()
    .unwrap();

内容的提问来源于stack exchange,提问作者weyh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:24:06