在shell脚本中通过SSH持续通信

时间:2013-10-28 19:12:06

标签: shell ssh zsh

我正在编写一个zsh脚本,我想在其中建立SSH连接,将一些命令发送到远程主机并读取输出。

我可以做类似

的事情
cat commands.list | ssh foobar.com | { process output }

然而,这将一次执行,连接将关闭。相反,我想做一些像 -

while [ some condition ]; do
    write command to ssh process
    read output from ssh process
    make some decision about the next command to write to ssh process
do 

我看过zsh redirectionzsh process substitution,但未能弄清楚如何在这里使用这些对我有利。

有一种用于阅读的<(..)形式的进程替换和用于写入的>(..)形式,但没有形式可以读取和写入两者。如果有一个我可以将过程绑定到自定义文件描述符?

我还尝试将ssh进程的stdin和stdout绑定到两个fifos(管道),但是写入(使用echo)到stdin管道也发送一个EOF(当echo进程结束时),执行一个后关闭连接写的命令

任何想法是否/如何实现我在这里尝试做的事情?

感谢。

1 个答案:

答案 0 :(得分:1)

感谢chepner的评论。

我还发现了ssh的ControlMaster功能。 http://www.linuxjournal.com/content/speed-multiple-ssh-connections-same-server

在我的配置文件中配置,我不介意为每个远程命令再次运行ssh!