我有一台远程计算机,其中有一个 Linux 二进制文件,可以接受许多参数和一个文本文件。程序的输出被写入 stdout,而我总是将其写入文本文件。我发现自己将一个数据文件复制到远程计算机,在该文件上执行命令,然后将结果文件复制回来。这很耗时,而且容易出错。
是否可以使用 SSH 和标准 Linux 工具通过 SSH 在本地文件上运行远程二进制文件,而无需先将其复制到远程机器?
理想情况下,我希望在本地机器上有一个 bash 脚本。我将数据文件指定为参数,它会执行所有 SSH 连接、数据发送等操作,并在本地将结果输出到 stdout。
我的本地计算机是 Mac OS X,而远程计算机是 Linux。不,我无法让 Linux 二进制文件在 Mac OS X 上运行。
更新:远程机器上的工具能从标准输入读取。
答案1
如果该工具可以读取标准输入代替一个文本文件并通过 stdout 提供其输出,此bash
语法应该可以远程运行它而无需复制任何文件:
< "/local_path/to/input_file" ssh user@remote 'the_tool -some_option1 -option2'
注意:有些命令需要特殊选项或参数(例如-
)来读取 stdin;有些命令在没有指定输入文件的情况下读取 stdin。我对您的工具一无所知,所以这是一种通用方法,您可能需要进行调整。
>
使用或 (local)将输出重定向到本地文件tee
也可以:
< "/local_path/to/input_file" ssh user@remote 'the_tool -some_option1 -option2' | tee "/local_path/to/output_file"
例如:remotecat
连接 local 和 remote /etc/hosts
:
< "/etc/hosts" ssh user@remote 'cat - /etc/hosts'