管道及时命令ssh

时间:2014-03-18 12:36:38

标签: linux bash ssh

我正在尝试将命令传递给已打开的SSH会话。这些命令将由脚本生成,分析结果,并按照发送下一个命令。

我不想将所有命令放在远程主机上的脚本中,只是运行该脚本,因为我也对SSH进程的状态感兴趣:在本地发送命令允许“测试”是否SSH连接是否存在,并从SSH进程获取适当的返回代码。

我尝试过使用这些内容:

$ mkfifo /tpm/commands
$ ssh -t remote </tmp/commands

从另一个词来看:

$ echo "command" >> /tmp/commands

问题:SSH告诉我没有为stdin打开伪tty,并在“command”终止后立即关闭连接。

我尝试了另一种方法:

$ ssh -t remote <<EOF 
$(echo "command"; while true; do sleep 10; echo "command"; done)
EOF

但是,在达到EOF之前,没有任何东西被冲到ssh(在我的情况下,从来没有)。

你们有没有解决方案?

1 个答案:

答案 0 :(得分:3)

在完成之前停止关闭/ tmp /命令。当你关闭管道时,ssh会停止读取它。

exec 7> /tmp/commands. # open once
echo foo >&7           # write multiple times
echo bar >&7
exec 7>&-              # close once

您还可以使用ssh -tt强制ssh在遥控器上打开tty。