3

我知道如何将标准输出重定向到文件,但是否可以将标准输出重定向到进程(Linux 环境)?

例如,如果我通过“~^Z”将一个活动的 SSH 会话移到后台,有没有办法在我的本地主机上启动另一个程序并将其标准输出重定向到 SSH 会话?

谢谢!

4

1 回答 1

3

有时像

echo "something" > /proc/pid-of-process/fd/0

工作,但如果他们链接到伪终端,它不会。

所以,这是做你想做的事的一种方法。

  1. ** 配置您的 SSH 连接以使用证书/无密码登录。
  2. 创建一个命名管道(例如mkfifo mypipe
  3. 使用 tail 从管道中读取数据并将其传递给 SSH 进程,例如:

    tail -f mypipe | ssh -t -t user@somehost.com

  4. 将您想要进入 ssh 会话的任何内容发送到命名管道,例如:

    echo "ls -l" > mypipe

    因此,如果您需要从另一个程序中传输内容,您只需这样做

    ./my-program > /path/to/mypipe

  5. 你完成了。

一些注意事项:

  1. ** 是可选的,但如果不这样做,则必须在启动 SSH 会话的终端上输入密码,不能通过管道传递密码。事实上,如果你尝试,一旦 SSH 连接完成,它就会显示为通过管道传递的明文。
  2. 您的 SSH 会话现在仅与您的命名管道一样安全。只是一个抬头。
  3. 连接后,您将无法从原始终端使用 SSH 会话。您必须使用命名管道。
  4. 您始终可以 ctrl+c 原始终端中的 SSH 进程来杀死它并恢复终端的功能。
  5. 任何输出都将出现在原始终端上——可能很明显,但我只是想指出这一点。
  6. -f选项 totail是防止 SSH 进程在管道为空时接收 EOF 所必需的。还有其他方法可以防止管道关闭,但我认为这是最简单的方法。
  7. 强制 tty 分配的-t -t选项,否则它会抱怨,因为在您的情况下正在传输标准输入。ssh
  8. 最后,几乎肯定有更好的方法来做你想做的事——如果这是任何严重/长期的事情,你应该考虑找到它。
于 2012-09-01T00:02:40.497 回答