如何直接通过ssh/scp读取文件

q09*_*987 5 linux redhat

我有一个用C/C++编写的程序,它读取两个文件,然后生成一些报告.典型的工作流程如下:

1> scp user@server01:/temp/file1.txt ~/ then input my password for the prompty

2> my_program file1.txt localfile.txt
Run Code Online (Sandbox Code Playgroud)

有没有办法让我的程序直接处理远程文件而不先将文件显式复制到本地?我尝试了以下命令,但它对我不起作用.

> my_program <(ssh user@server01:/temp/file1.txt) localfile.txt
Run Code Online (Sandbox Code Playgroud)

eck*_*kes 9

你需要使用ssh user@host "cat /temp/file.txt".

您可以使用它将其重定向到程序的stdin:ssh user@host "cat /temp/file.txt" | my_program或者您可以使用fork/exec在程序中实际调用它.或者像你描述的那样生成一个临时文件:my_program <(ssh user@host "cat /temp/file.txt")

其他选项是在程序中使用带有fuse的sshfs或使用ssh(或VFS)库.

  • 另外,您可能需要使用授权密钥设置无密码 ssh,否则您将让您的程序发送您的密码 (2认同)

twa*_*erg 6

如果你真的使用 Red Hat Linux,这应该可以工作:

ssh user@host cat /temp/file1.txt | my_program /dev/stdin localfile.txt
Run Code Online (Sandbox Code Playgroud)

使用单个-而不是也/dev/stdin可能有效,但这取决于是否my_program编写为将参数解释为-“从标准输入读取此文件”。

my_program另外,如果期望能够在第一个文件中查找(I/O 流通常是不可查找的),这可能不起作用,但如果它所做的只是从第一个字节读取到最后一个字节,那么应该没问题。