代码之家  ›  专栏  ›  技术社区  ›  Justin

节点。js child_process-exec,stdin未传递给ssh

  •  3
  • Justin  · 技术社区  · 10 年前

    我有以下节点。js代码将ssh发送到服务器,转发stdout非常有效,但每当我键入任何内容时,它都不会转发到服务器。如何将本地stdin转发到ssh连接stdin?

    var command = 'ssh -tt -i ' + keyPath + ' -o StrictHostKeyChecking=no ubuntu@' + hostIp;
    
    var ssh = child_proc.exec(command, {
        env: process.env
    });
    
    ssh.stdout.on('data', function (data) {
        console.log(data.toString());
    });
    
    ssh.stderr.on('data', function (data) {
        console.error(data.toString());
    });
    
    ssh.on('exit', function (code) {
        process.exit(code);
    });
    
    1 回复  |  直到 10 年前
        1
  •  6
  •   mscdex    10 年前

    如果你想通过管道 process.stdin 到子进程:

    • 子进程具有 stdin 属性,表示子进程的stdin。所以你只需要添加 process.stdin.pipe(ssh.stdin)

    • 您可以指定自定义 stdio 当生成进程时,告诉它要为子进程的stdin使用什么:

      child_proc.exec(command, { env: process.env, stdio: [process.stdin, 'pipe', 'pipe'] })
      

    此外,半相关的注意事项是,如果您希望避免生成子进程,并对其进行更多的编程控制和/或拥有更多的轻量级ssh/sftp连接 ssh2 单元

    推荐文章