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

如何在C#执行pscp命令时自动回应确认提示为Yes?

解决C#执行pscp自动回复确认提示的问题

我来帮你搞定这个自动回复pscp确认的需求!你在批处理里用echo y |的思路是对的——本质是把"y"作为标准输入传递给pscp,在C#里我们只需要对进程的标准输入做同样的操作就行,下面是具体的修改方案:

核心修改点

你的现有代码已经重定向了标准输出,但还需要启用标准输入重定向,然后往pscp的输入流里写入"y"(加上换行符模拟回车)。另外还要注意等待进程执行完成,确保输入被正确处理。

修改后的完整代码

首先调整ExecuteCopyCerts函数:

public Boolean ExecuteCopyCerts(string fileName, string arguments)
{
    txtLiveHubStatus.Text = "";
    try
    {
        System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo(fileName, arguments);
        procStartInfo.RedirectStandardOutput = true;
        // 新增:启用标准输入重定向
        procStartInfo.RedirectStandardInput = true;
        procStartInfo.UseShellExecute = false;
        procStartInfo.CreateNoWindow = true;

        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo = procStartInfo;
        proc.Start();

        // 关键:往pscp的标准输入写入"y"并回车,模拟手动确认
        proc.StandardInput.WriteLine("y");
        // 关闭输入流,告诉pscp没有更多输入了
        proc.StandardInput.Close();

        string result = proc.StandardOutput.ReadToEnd();
        // 等待进程执行完成,确保所有操作都完成
        proc.WaitForExit();
        
        return proc.ExitCode == 0;
    }
    catch (Exception ex)
    {
        // 添加异常处理,更新状态文本提示错误
        txtLiveHubStatus.Text = $"执行出错:{ex.Message}";
        return false;
    }
}

然后调整调用代码的参数(注意路径的转义问题,建议用@前缀避免转义错误):

// 用@前缀避免路径里的转义字符问题,或者用双反斜杠\\
string pscpArgs = @" -batch -pw password E:\Certs\client.conf me@<ip>:/home/user";
ExecuteCopyCerts("pscp.exe", pscpArgs);

额外说明

  • -batch参数本身是让pscp在非交互模式下运行,但第一次连接新主机时,它还是会弹出确认主机密钥的提示,这时候就需要我们手动输入"y"来确认,这也是为什么需要写入输入流的原因。
  • 如果你遇到路径解析错误,一定要检查字符串里的反斜杠——C#里\是转义字符,所以要么用\\,要么用@前缀的字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:30:46