linux - 将及时命令传送到 ssh

标签 linux bash ssh

我正在尝试将命令通过管道传输到打开的 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/

相关文章:

bash - 关于 bash 文件的混淆存在测试操作符

linux - 了解 bash 中的 exec

php - PHPUnit 测试期间的 SSH 隧道

linux - 将密码添加到在 amazon AMI 上运行的 curl

linux - 使用 EC2 专用 AMI 的 Putty 出现 SSH 错误

Bash:从用户输入读取字符串后,字符串的错误 "interpretation"

ssh - 忽略SSH超时以继续Gitlab CI

amazon-web-services - 如何为我的 AWS-EB 实例启用 SSH?

linux - 以编程方式检查 Linux 时钟的健全性

ruby - 在特定字符串之后提取搜索查询或术语的脚本