我正在尝试将命令传递给已打开的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(在我的情况下,从来没有)。
你们有没有解决方案?
答案 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。