我正在尝试将命令通过管道传输到打开的 SSH session 。命令将由脚本生成,分析结果,并根据结果发送下一个命令。
我不想将所有命令放在远程主机上的脚本中,然后只运行该脚本,因为我也对 SSH 进程的状态感兴趣:在本地发送命令允许“测试”是否SSH 连接是否处于事件状态,并从 SSH 进程获取相应的返回代码。
我尝试使用以下内容:
$ mkfifo /tpm/commands
$ ssh -t remote </tmp/commands
从另一个术语来看:
$ echo "command" >> /tmp/commands
问题:SSH 告诉我不会为 stdin 打开伪 tty,并在“命令”终止后立即关闭连接。
我尝试了另一种方法:
$ ssh -t remote <<EOF
$(echo "command"; while true; do sleep 10; echo "command"; done)
EOF
但是,在达到 EOF 之前,不会将任何内容刷新到 ssh(在我的情况下,永远不会)。
你们有解决办法吗?
最佳答案
在完成之前停止关闭/tmp/commands。当您关闭管道时,ssh 将停止从中读取数据。
exec 7> /tmp/commands. # open once
echo foo >&7 # write multiple times
echo bar >&7
exec 7>&- # close once
您还可以使用ssh -tt
强制 ssh 在远程打开 tty。
关于linux - 将及时命令传送到 ssh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22479631/